X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsys_socket.in.h;h=e3f6d6c6ebd85c61a16f2efb4aa36eb9e46f5130;hb=d1d75d5540bf75df8bc41c85b5a9fd111ca1f2dd;hp=13729c6467313883d119e17545360b8f762a8107;hpb=44656541e5be621a9430633f8c3a4fdea64d284d;p=gnulib.git diff --git a/lib/sys_socket.in.h b/lib/sys_socket.in.h index 13729c646..e3f6d6c6e 100644 --- a/lib/sys_socket.in.h +++ b/lib/sys_socket.in.h @@ -1,6 +1,6 @@ /* Provide a sys/socket header file for systems lacking it (read: MinGW) and for systems where it is incomplete. - Copyright (C) 2005-2008 Free Software Foundation, Inc. + Copyright (C) 2005-2009 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can redistribute it and/or modify @@ -27,7 +27,9 @@ #if @HAVE_SYS_SOCKET_H@ +# if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ +# endif /* On many platforms, assumes prior inclusion of . */ @@ -41,6 +43,30 @@ #ifndef _GL_SYS_SOCKET_H #define _GL_SYS_SOCKET_H +#if !@HAVE_SA_FAMILY_T@ +typedef unsigned short sa_family_t; +#endif + +#if !@HAVE_STRUCT_SOCKADDR_STORAGE@ +# include +/* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on + 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ +# define __ss_aligntype unsigned long int +# define _SS_SIZE 256 +# define _SS_PADSIZE \ + (_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \ + ? sizeof (sa_family_t) \ + : alignof (__ss_aligntype)) \ + + sizeof (__ss_aligntype))) + +struct sockaddr_storage +{ + sa_family_t ss_family; /* Address family, etc. */ + __ss_aligntype __ss_align; /* Force desired alignment. */ + char __ss_padding[_SS_PADSIZE]; +}; +#endif + #if @HAVE_SYS_SOCKET_H@ /* A platform that has . */ @@ -118,9 +144,9 @@ extern "C" { /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ static inline int -rpl_fd_isset (int fd, fd_set * set) +rpl_fd_isset (SOCKET fd, fd_set * set) { - int i; + u_int i; if (set == NULL) return 0; @@ -138,10 +164,14 @@ rpl_fd_isset (int fd, fd_set * set) /* Wrap everything else to use libc file descriptors for sockets. */ -# if @HAVE_WINSOCK2_H@ +# if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H # undef close -# define close rpl_close -extern int rpl_close(int); +# define close close_used_without_including_unistd_h +# endif + +# if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H +# undef gethostname +# define gethostname gethostname_used_without_including_unistd_h # endif # if @GNULIB_SOCKET@ @@ -250,7 +280,7 @@ extern int rpl_getsockname (int, struct sockaddr *, int *); # if @HAVE_WINSOCK2_H@ # undef getsockopt # define getsockopt rpl_getsockopt -extern int rpl_getsockopt (int, int, int, void *, int *); +extern int rpl_getsockopt (int, int, int, void *, socklen_t *); # endif # elif @HAVE_WINSOCK2_H@ # undef getsockopt @@ -280,12 +310,6 @@ extern int rpl_listen (int, int); listen (s, b)) # endif -# if @HAVE_WINSOCK2_H@ -# undef ioctl -# define ioctl rpl_ioctl -extern int rpl_ioctl (int, unsigned long, char *); -# endif - # if @GNULIB_RECV@ # if @HAVE_WINSOCK2_H@ # undef recv @@ -358,7 +382,7 @@ extern int rpl_sendto (int, const void *, int, int, struct sockaddr *, int); # if @HAVE_WINSOCK2_H@ # undef setsockopt # define setsockopt rpl_setsockopt -extern int rpl_setsockopt (int, int, int, const void *, int); +extern int rpl_setsockopt (int, int, int, const void *, socklen_t); # endif # elif @HAVE_WINSOCK2_H@ # undef setsockopt @@ -371,6 +395,23 @@ extern int rpl_setsockopt (int, int, int, const void *, int); setsockopt (s, lvl, o, v, l)) # endif +# if @GNULIB_SHUTDOWN@ +# if @HAVE_WINSOCK2_H@ +# undef shutdown +# define shutdown rpl_shutdown +extern int rpl_shutdown (int, int); +# endif +# elif @HAVE_WINSOCK2_H@ +# undef shutdown +# define shutdown shutdown_used_without_requesting_gnulib_module_shutdown +# elif defined GNULIB_POSIXCHECK +# undef shutdown +# define shutdown(s,h) \ + (GL_LINK_WARNING ("shutdown is not always POSIX compliant - " \ + "use gnulib module shutdown for portability"), \ + shutdown (s, h)) +# endif + # if @HAVE_WINSOCK2_H@ # undef select # define select select_used_without_including_sys_select_h @@ -382,5 +423,32 @@ extern int rpl_setsockopt (int, int, int, const void *, int); #endif /* HAVE_SYS_SOCKET_H */ +#ifdef __cplusplus +extern "C" { +#endif + +#if @GNULIB_ACCEPT4@ +/* Accept a connection on a socket, with specific opening flags. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + See also the Linux man page at + . */ +# if @HAVE_ACCEPT4@ +# define accept4 rpl_accept4 +# endif +extern int accept4 (int sockfd, struct sockaddr *addr, socklen_t *addrlen, + int flags); +#elif defined GNULIB_POSIXCHECK +# undef accept4 +# define accept4(s,a,l,f) \ + (GL_LINK_WARNING ("accept4 is unportable - " \ + "use gnulib module accept4 for portability"), \ + accept4 (s, a, l, f)) +#endif + +#ifdef __cplusplus +} +#endif + #endif /* _GL_SYS_SOCKET_H */ #endif /* _GL_SYS_SOCKET_H */