diff options
Diffstat (limited to 'gl/sys_socket.in.h')
-rw-r--r-- | gl/sys_socket.in.h | 163 |
1 files changed, 112 insertions, 51 deletions
diff --git a/gl/sys_socket.in.h b/gl/sys_socket.in.h index fc105e6..b4cf0c3 100644 --- a/gl/sys_socket.in.h +++ b/gl/sys_socket.in.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* Provide a sys/socket header file for systems lacking it (read: MinGW) | 1 | /* Provide a sys/socket header file for systems lacking it (read: MinGW) |
2 | and for systems where it is incomplete. | 2 | and for systems where it is incomplete. |
3 | Copyright (C) 2005-2010 Free Software Foundation, Inc. | 3 | Copyright (C) 2005-2013 Free Software Foundation, Inc. |
4 | Written by Simon Josefsson. | 4 | Written by Simon Josefsson. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 6 | This program is free software; you can redistribute it and/or modify |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 16 | You should have received a copy of the GNU General Public License |
17 | along with this program; if not, write to the Free Software Foundation, | 17 | along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | /* This file is supposed to be used on platforms that lack <sys/socket.h>, | 19 | /* This file is supposed to be used on platforms that lack <sys/socket.h>, |
21 | on platforms where <sys/socket.h> cannot be included standalone, and on | 20 | on platforms where <sys/socket.h> cannot be included standalone, and on |
@@ -26,6 +25,7 @@ | |||
26 | #if __GNUC__ >= 3 | 25 | #if __GNUC__ >= 3 |
27 | @PRAGMA_SYSTEM_HEADER@ | 26 | @PRAGMA_SYSTEM_HEADER@ |
28 | #endif | 27 | #endif |
28 | @PRAGMA_COLUMNS@ | ||
29 | 29 | ||
30 | #if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H | 30 | #if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H |
31 | /* Special invocation convention: | 31 | /* Special invocation convention: |
@@ -39,7 +39,7 @@ | |||
39 | #else | 39 | #else |
40 | /* Normal invocation convention. */ | 40 | /* Normal invocation convention. */ |
41 | 41 | ||
42 | #ifndef _GL_SYS_SOCKET_H | 42 | #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H |
43 | 43 | ||
44 | #if @HAVE_SYS_SOCKET_H@ | 44 | #if @HAVE_SYS_SOCKET_H@ |
45 | 45 | ||
@@ -49,6 +49,10 @@ | |||
49 | <sys/types.h>. */ | 49 | <sys/types.h>. */ |
50 | # include <sys/types.h> | 50 | # include <sys/types.h> |
51 | 51 | ||
52 | /* On FreeBSD 6.4, <sys/socket.h> defines some macros that assume that NULL | ||
53 | is defined. */ | ||
54 | # include <stddef.h> | ||
55 | |||
52 | /* The include_next requires a split double-inclusion guard. */ | 56 | /* The include_next requires a split double-inclusion guard. */ |
53 | # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ | 57 | # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ |
54 | 58 | ||
@@ -56,8 +60,13 @@ | |||
56 | 60 | ||
57 | #endif | 61 | #endif |
58 | 62 | ||
59 | #ifndef _GL_SYS_SOCKET_H | 63 | #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H |
60 | #define _GL_SYS_SOCKET_H | 64 | #define _@GUARD_PREFIX@_SYS_SOCKET_H |
65 | |||
66 | _GL_INLINE_HEADER_BEGIN | ||
67 | #ifndef _GL_SYS_SOCKET_INLINE | ||
68 | # define _GL_SYS_SOCKET_INLINE _GL_INLINE | ||
69 | #endif | ||
61 | 70 | ||
62 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ | 71 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ |
63 | 72 | ||
@@ -66,11 +75,21 @@ | |||
66 | /* The definition of _GL_WARN_ON_USE is copied here. */ | 75 | /* The definition of _GL_WARN_ON_USE is copied here. */ |
67 | 76 | ||
68 | #if !@HAVE_SA_FAMILY_T@ | 77 | #if !@HAVE_SA_FAMILY_T@ |
78 | # if !GNULIB_defined_sa_family_t | ||
69 | typedef unsigned short sa_family_t; | 79 | typedef unsigned short sa_family_t; |
80 | # define GNULIB_defined_sa_family_t 1 | ||
81 | # endif | ||
70 | #endif | 82 | #endif |
71 | 83 | ||
72 | #if !@HAVE_STRUCT_SOCKADDR_STORAGE@ | 84 | #if @HAVE_STRUCT_SOCKADDR_STORAGE@ |
73 | # include <alignof.h> | 85 | /* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1. */ |
86 | # if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ | ||
87 | # ifndef ss_family | ||
88 | # define ss_family __ss_family | ||
89 | # endif | ||
90 | # endif | ||
91 | #else | ||
92 | # include <stdalign.h> | ||
74 | /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on | 93 | /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on |
75 | 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ | 94 | 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ |
76 | # define __ss_aligntype unsigned long int | 95 | # define __ss_aligntype unsigned long int |
@@ -81,12 +100,22 @@ typedef unsigned short sa_family_t; | |||
81 | : alignof (__ss_aligntype)) \ | 100 | : alignof (__ss_aligntype)) \ |
82 | + sizeof (__ss_aligntype))) | 101 | + sizeof (__ss_aligntype))) |
83 | 102 | ||
103 | # if !GNULIB_defined_struct_sockaddr_storage | ||
84 | struct sockaddr_storage | 104 | struct sockaddr_storage |
85 | { | 105 | { |
86 | sa_family_t ss_family; /* Address family, etc. */ | 106 | sa_family_t ss_family; /* Address family, etc. */ |
87 | __ss_aligntype __ss_align; /* Force desired alignment. */ | 107 | __ss_aligntype __ss_align; /* Force desired alignment. */ |
88 | char __ss_padding[_SS_PADSIZE]; | 108 | char __ss_padding[_SS_PADSIZE]; |
89 | }; | 109 | }; |
110 | # define GNULIB_defined_struct_sockaddr_storage 1 | ||
111 | # endif | ||
112 | |||
113 | #endif | ||
114 | |||
115 | /* Get struct iovec. */ | ||
116 | /* But avoid namespace pollution on glibc systems. */ | ||
117 | #if ! defined __GLIBC__ | ||
118 | # include <sys/uio.h> | ||
90 | #endif | 119 | #endif |
91 | 120 | ||
92 | #if @HAVE_SYS_SOCKET_H@ | 121 | #if @HAVE_SYS_SOCKET_H@ |
@@ -118,16 +147,15 @@ struct sockaddr_storage | |||
118 | that you can influence which definitions you get by setting the | 147 | that you can influence which definitions you get by setting the |
119 | WINVER symbol before including these two files. For example, | 148 | WINVER symbol before including these two files. For example, |
120 | getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that | 149 | getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that |
121 | symbol is set indiriectly through WINVER). You can set this by | 150 | symbol is set indirectly through WINVER). You can set this by |
122 | adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your | 151 | adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your |
123 | code may not run on older Windows releases then. My Windows 2000 | 152 | code may not run on older Windows releases then. My Windows 2000 |
124 | box was not able to run the code, for example. The situation is | 153 | box was not able to run the code, for example. The situation is |
125 | slightly confusing because: | 154 | slightly confusing because |
126 | http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/getaddrinfo_2.asp | 155 | <http://msdn.microsoft.com/en-us/library/ms738520> |
127 | suggests that getaddrinfo should be available on all Windows | 156 | suggests that getaddrinfo should be available on all Windows |
128 | releases. */ | 157 | releases. */ |
129 | 158 | ||
130 | |||
131 | # if @HAVE_WINSOCK2_H@ | 159 | # if @HAVE_WINSOCK2_H@ |
132 | # include <winsock2.h> | 160 | # include <winsock2.h> |
133 | # endif | 161 | # endif |
@@ -151,17 +179,34 @@ struct sockaddr_storage | |||
151 | # include <sys/types.h> | 179 | # include <sys/types.h> |
152 | # include <io.h> | 180 | # include <io.h> |
153 | 181 | ||
182 | # if !GNULIB_defined_socklen_t | ||
154 | typedef int socklen_t; | 183 | typedef int socklen_t; |
184 | # define GNULIB_defined_socklen_t 1 | ||
185 | # endif | ||
155 | 186 | ||
156 | # endif | 187 | # endif |
157 | 188 | ||
189 | /* Rudimentary 'struct msghdr'; this works as long as you don't try to | ||
190 | access msg_control or msg_controllen. */ | ||
191 | struct msghdr { | ||
192 | void *msg_name; | ||
193 | socklen_t msg_namelen; | ||
194 | struct iovec *msg_iov; | ||
195 | int msg_iovlen; | ||
196 | int msg_flags; | ||
197 | }; | ||
198 | |||
158 | #endif | 199 | #endif |
159 | 200 | ||
201 | /* Fix some definitions from <winsock2.h>. */ | ||
202 | |||
160 | #if @HAVE_WINSOCK2_H@ | 203 | #if @HAVE_WINSOCK2_H@ |
161 | 204 | ||
205 | # if !GNULIB_defined_rpl_fd_isset | ||
206 | |||
162 | /* Re-define FD_ISSET to avoid a WSA call while we are not using | 207 | /* Re-define FD_ISSET to avoid a WSA call while we are not using |
163 | network sockets. */ | 208 | network sockets. */ |
164 | static inline int | 209 | _GL_SYS_SOCKET_INLINE int |
165 | rpl_fd_isset (SOCKET fd, fd_set * set) | 210 | rpl_fd_isset (SOCKET fd, fd_set * set) |
166 | { | 211 | { |
167 | u_int i; | 212 | u_int i; |
@@ -175,33 +220,46 @@ rpl_fd_isset (SOCKET fd, fd_set * set) | |||
175 | return 0; | 220 | return 0; |
176 | } | 221 | } |
177 | 222 | ||
223 | # define GNULIB_defined_rpl_fd_isset 1 | ||
224 | # endif | ||
225 | |||
178 | # undef FD_ISSET | 226 | # undef FD_ISSET |
179 | # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) | 227 | # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) |
180 | 228 | ||
181 | #endif | 229 | #endif |
182 | 230 | ||
183 | /* Wrap everything else to use libc file descriptors for sockets. */ | 231 | /* Hide some function declarations from <winsock2.h>. */ |
184 | 232 | ||
185 | #if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H | 233 | #if @HAVE_WINSOCK2_H@ |
186 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | 234 | # if !defined _@GUARD_PREFIX@_UNISTD_H |
187 | # undef close | 235 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
188 | # define close close_used_without_including_unistd_h | 236 | # undef close |
189 | # else | 237 | # define close close_used_without_including_unistd_h |
190 | _GL_WARN_ON_USE (close, | 238 | # else |
191 | "close() used without including <unistd.h>"); | 239 | _GL_WARN_ON_USE (close, |
240 | "close() used without including <unistd.h>"); | ||
241 | # endif | ||
242 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
243 | # undef gethostname | ||
244 | # define gethostname gethostname_used_without_including_unistd_h | ||
245 | # else | ||
246 | _GL_WARN_ON_USE (gethostname, | ||
247 | "gethostname() used without including <unistd.h>"); | ||
248 | # endif | ||
192 | # endif | 249 | # endif |
193 | #endif | 250 | # if !defined _@GUARD_PREFIX@_SYS_SELECT_H |
194 | 251 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | |
195 | #if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H | 252 | # undef select |
196 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | 253 | # define select select_used_without_including_sys_select_h |
197 | # undef gethostname | 254 | # else |
198 | # define gethostname gethostname_used_without_including_unistd_h | 255 | _GL_WARN_ON_USE (select, |
199 | # else | 256 | "select() used without including <sys/select.h>"); |
200 | _GL_WARN_ON_USE (gethostname, | 257 | # endif |
201 | "gethostname() used without including <unistd.h>"); | ||
202 | # endif | 258 | # endif |
203 | #endif | 259 | #endif |
204 | 260 | ||
261 | /* Wrap everything else to use libc file descriptors for sockets. */ | ||
262 | |||
205 | #if @GNULIB_SOCKET@ | 263 | #if @GNULIB_SOCKET@ |
206 | # if @HAVE_WINSOCK2_H@ | 264 | # if @HAVE_WINSOCK2_H@ |
207 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | 265 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
@@ -237,8 +295,11 @@ _GL_FUNCDECL_RPL (connect, int, | |||
237 | _GL_CXXALIAS_RPL (connect, int, | 295 | _GL_CXXALIAS_RPL (connect, int, |
238 | (int fd, const struct sockaddr *addr, socklen_t addrlen)); | 296 | (int fd, const struct sockaddr *addr, socklen_t addrlen)); |
239 | # else | 297 | # else |
240 | _GL_CXXALIAS_SYS (connect, int, | 298 | /* Need to cast, because on NonStop Kernel, the third parameter is |
241 | (int fd, const struct sockaddr *addr, socklen_t addrlen)); | 299 | size_t addrlen. */ |
300 | _GL_CXXALIAS_SYS_CAST (connect, int, | ||
301 | (int fd, | ||
302 | const struct sockaddr *addr, socklen_t addrlen)); | ||
242 | # endif | 303 | # endif |
243 | _GL_CXXALIASWARN (connect); | 304 | _GL_CXXALIASWARN (connect); |
244 | #elif @HAVE_WINSOCK2_H@ | 305 | #elif @HAVE_WINSOCK2_H@ |
@@ -292,8 +353,11 @@ _GL_FUNCDECL_RPL (bind, int, | |||
292 | _GL_CXXALIAS_RPL (bind, int, | 353 | _GL_CXXALIAS_RPL (bind, int, |
293 | (int fd, const struct sockaddr *addr, socklen_t addrlen)); | 354 | (int fd, const struct sockaddr *addr, socklen_t addrlen)); |
294 | # else | 355 | # else |
295 | _GL_CXXALIAS_SYS (bind, int, | 356 | /* Need to cast, because on NonStop Kernel, the third parameter is |
296 | (int fd, const struct sockaddr *addr, socklen_t addrlen)); | 357 | size_t addrlen. */ |
358 | _GL_CXXALIAS_SYS_CAST (bind, int, | ||
359 | (int fd, | ||
360 | const struct sockaddr *addr, socklen_t addrlen)); | ||
297 | # endif | 361 | # endif |
298 | _GL_CXXALIASWARN (bind); | 362 | _GL_CXXALIASWARN (bind); |
299 | #elif @HAVE_WINSOCK2_H@ | 363 | #elif @HAVE_WINSOCK2_H@ |
@@ -514,9 +578,11 @@ _GL_CXXALIAS_RPL (sendto, ssize_t, | |||
514 | (int fd, const void *buf, size_t len, int flags, | 578 | (int fd, const void *buf, size_t len, int flags, |
515 | const struct sockaddr *to, socklen_t tolen)); | 579 | const struct sockaddr *to, socklen_t tolen)); |
516 | # else | 580 | # else |
517 | _GL_CXXALIAS_SYS (sendto, ssize_t, | 581 | /* Need to cast, because on NonStop Kernel, the sixth parameter is |
518 | (int fd, const void *buf, size_t len, int flags, | 582 | size_t tolen. */ |
519 | const struct sockaddr *to, socklen_t tolen)); | 583 | _GL_CXXALIAS_SYS_CAST (sendto, ssize_t, |
584 | (int fd, const void *buf, size_t len, int flags, | ||
585 | const struct sockaddr *to, socklen_t tolen)); | ||
520 | # endif | 586 | # endif |
521 | _GL_CXXALIASWARN (sendto); | 587 | _GL_CXXALIASWARN (sendto); |
522 | #elif @HAVE_WINSOCK2_H@ | 588 | #elif @HAVE_WINSOCK2_H@ |
@@ -542,8 +608,11 @@ _GL_FUNCDECL_RPL (setsockopt, int, (int fd, int level, int optname, | |||
542 | _GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname, | 608 | _GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname, |
543 | const void * optval, socklen_t optlen)); | 609 | const void * optval, socklen_t optlen)); |
544 | # else | 610 | # else |
545 | _GL_CXXALIAS_SYS (setsockopt, int, (int fd, int level, int optname, | 611 | /* Need to cast, because on NonStop Kernel, the fifth parameter is |
546 | const void * optval, socklen_t optlen)); | 612 | size_t optlen. */ |
613 | _GL_CXXALIAS_SYS_CAST (setsockopt, int, | ||
614 | (int fd, int level, int optname, | ||
615 | const void * optval, socklen_t optlen)); | ||
547 | # endif | 616 | # endif |
548 | _GL_CXXALIASWARN (setsockopt); | 617 | _GL_CXXALIASWARN (setsockopt); |
549 | #elif @HAVE_WINSOCK2_H@ | 618 | #elif @HAVE_WINSOCK2_H@ |
@@ -580,16 +649,6 @@ _GL_WARN_ON_USE (shutdown, "shutdown is not always POSIX compliant - " | |||
580 | # endif | 649 | # endif |
581 | #endif | 650 | #endif |
582 | 651 | ||
583 | #if @HAVE_WINSOCK2_H@ | ||
584 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
585 | # undef select | ||
586 | # define select select_used_without_including_sys_select_h | ||
587 | # else | ||
588 | _GL_WARN_ON_USE (select, | ||
589 | "select() used without including <sys/select.h>"); | ||
590 | # endif | ||
591 | #endif | ||
592 | |||
593 | #if @GNULIB_ACCEPT4@ | 652 | #if @GNULIB_ACCEPT4@ |
594 | /* Accept a connection on a socket, with specific opening flags. | 653 | /* Accept a connection on a socket, with specific opening flags. |
595 | The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) | 654 | The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) |
@@ -623,6 +682,8 @@ _GL_WARN_ON_USE (accept4, "accept4 is unportable - " | |||
623 | # endif | 682 | # endif |
624 | #endif | 683 | #endif |
625 | 684 | ||
626 | #endif /* _GL_SYS_SOCKET_H */ | 685 | _GL_INLINE_HEADER_END |
627 | #endif /* _GL_SYS_SOCKET_H */ | 686 | |
687 | #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ | ||
688 | #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ | ||
628 | #endif | 689 | #endif |