| 1 | /* Provide a sys/socket header file for systems lacking it (read: MinGW)
|
|---|
| 2 | and for systems where it is incomplete.
|
|---|
| 3 | Copyright (C) 2005-2021 Free Software Foundation, Inc.
|
|---|
| 4 | Written by Simon Josefsson.
|
|---|
| 5 |
|
|---|
| 6 | This file is free software: you can redistribute it and/or modify
|
|---|
| 7 | it under the terms of the GNU Lesser General Public License as
|
|---|
| 8 | published by the Free Software Foundation; either version 2.1 of the
|
|---|
| 9 | License, or (at your option) any later version.
|
|---|
| 10 |
|
|---|
| 11 | This file is distributed in the hope that it will be useful,
|
|---|
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|---|
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|---|
| 14 | GNU Lesser General Public License for more details.
|
|---|
| 15 |
|
|---|
| 16 | You should have received a copy of the GNU Lesser General Public License
|
|---|
| 17 | along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
|---|
| 18 |
|
|---|
| 19 | /* This file is supposed to be used on platforms that lack <sys/socket.h>,
|
|---|
| 20 | on platforms where <sys/socket.h> cannot be included standalone, and on
|
|---|
| 21 | platforms where <sys/socket.h> does not provide all necessary definitions.
|
|---|
| 22 | It is intended to provide definitions and prototypes needed by an
|
|---|
| 23 | application. */
|
|---|
| 24 |
|
|---|
| 25 | #if __GNUC__ >= 3
|
|---|
| 26 | @PRAGMA_SYSTEM_HEADER@
|
|---|
| 27 | #endif
|
|---|
| 28 | @PRAGMA_COLUMNS@
|
|---|
| 29 |
|
|---|
| 30 | #if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H
|
|---|
| 31 | /* Special invocation convention:
|
|---|
| 32 | - On Cygwin 1.5.x we have a sequence of nested includes
|
|---|
| 33 | <sys/socket.h> -> <cygwin/socket.h> -> <asm/socket.h> -> <cygwin/if.h>,
|
|---|
| 34 | and the latter includes <sys/socket.h>. In this situation, the functions
|
|---|
| 35 | are not yet declared, therefore we cannot provide the C++ aliases. */
|
|---|
| 36 |
|
|---|
| 37 | #@INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@
|
|---|
| 38 |
|
|---|
| 39 | #else
|
|---|
| 40 | /* Normal invocation convention. */
|
|---|
| 41 |
|
|---|
| 42 | #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H
|
|---|
| 43 |
|
|---|
| 44 | #if @HAVE_SYS_SOCKET_H@
|
|---|
| 45 |
|
|---|
| 46 | # define _GL_ALREADY_INCLUDING_SYS_SOCKET_H
|
|---|
| 47 |
|
|---|
| 48 | /* On many platforms, <sys/socket.h> assumes prior inclusion of
|
|---|
| 49 | <sys/types.h>. */
|
|---|
| 50 | # include <sys/types.h>
|
|---|
| 51 |
|
|---|
| 52 | /* On FreeBSD 6.4, <sys/socket.h> defines some macros that assume that NULL
|
|---|
| 53 | is defined. */
|
|---|
| 54 | # include <stddef.h>
|
|---|
| 55 |
|
|---|
| 56 | /* The include_next requires a split double-inclusion guard. */
|
|---|
| 57 | # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@
|
|---|
| 58 |
|
|---|
| 59 | # undef _GL_ALREADY_INCLUDING_SYS_SOCKET_H
|
|---|
| 60 |
|
|---|
| 61 | #endif
|
|---|
| 62 |
|
|---|
| 63 | #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H
|
|---|
| 64 | #define _@GUARD_PREFIX@_SYS_SOCKET_H
|
|---|
| 65 |
|
|---|
| 66 | #ifndef _GL_INLINE_HEADER_BEGIN
|
|---|
| 67 | #error "Please include config.h first."
|
|---|
| 68 | #endif
|
|---|
| 69 | _GL_INLINE_HEADER_BEGIN
|
|---|
| 70 | #ifndef _GL_SYS_SOCKET_INLINE
|
|---|
| 71 | # define _GL_SYS_SOCKET_INLINE _GL_INLINE
|
|---|
| 72 | #endif
|
|---|
| 73 |
|
|---|
| 74 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
|
|---|
| 75 |
|
|---|
| 76 | /* The definition of _GL_ARG_NONNULL is copied here. */
|
|---|
| 77 |
|
|---|
| 78 | /* The definition of _GL_WARN_ON_USE is copied here. */
|
|---|
| 79 |
|
|---|
| 80 | #if !@HAVE_SA_FAMILY_T@
|
|---|
| 81 | # if !GNULIB_defined_sa_family_t
|
|---|
| 82 | /* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */
|
|---|
| 83 | # if !defined __KLIBC__ || defined TCPV40HDRS
|
|---|
| 84 | typedef unsigned short sa_family_t;
|
|---|
| 85 | # else
|
|---|
| 86 | typedef unsigned char sa_family_t;
|
|---|
| 87 | # endif
|
|---|
| 88 | # define GNULIB_defined_sa_family_t 1
|
|---|
| 89 | # endif
|
|---|
| 90 | #endif
|
|---|
| 91 |
|
|---|
| 92 | #if @HAVE_STRUCT_SOCKADDR_STORAGE@
|
|---|
| 93 | /* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1. */
|
|---|
| 94 | # if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
|
|---|
| 95 | # ifndef ss_family
|
|---|
| 96 | # define ss_family __ss_family
|
|---|
| 97 | # endif
|
|---|
| 98 | # endif
|
|---|
| 99 | #else
|
|---|
| 100 | # include <stdalign.h>
|
|---|
| 101 | /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on
|
|---|
| 102 | 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */
|
|---|
| 103 | # define __ss_aligntype unsigned long int
|
|---|
| 104 | # define _SS_SIZE 256
|
|---|
| 105 | # define _SS_PADSIZE \
|
|---|
| 106 | (_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \
|
|---|
| 107 | ? sizeof (sa_family_t) \
|
|---|
| 108 | : alignof (__ss_aligntype)) \
|
|---|
| 109 | + sizeof (__ss_aligntype)))
|
|---|
| 110 |
|
|---|
| 111 | # if !GNULIB_defined_struct_sockaddr_storage
|
|---|
| 112 | struct sockaddr_storage
|
|---|
| 113 | {
|
|---|
| 114 | sa_family_t ss_family; /* Address family, etc. */
|
|---|
| 115 | __ss_aligntype __ss_align; /* Force desired alignment. */
|
|---|
| 116 | char __ss_padding[_SS_PADSIZE];
|
|---|
| 117 | };
|
|---|
| 118 | # define GNULIB_defined_struct_sockaddr_storage 1
|
|---|
| 119 | # endif
|
|---|
| 120 |
|
|---|
| 121 | #endif
|
|---|
| 122 |
|
|---|
| 123 | /* Get struct iovec. */
|
|---|
| 124 | /* But avoid namespace pollution on glibc systems. */
|
|---|
| 125 | #if ! defined __GLIBC__
|
|---|
| 126 | # include <sys/uio.h>
|
|---|
| 127 | #endif
|
|---|
| 128 |
|
|---|
| 129 | #if @HAVE_SYS_SOCKET_H@
|
|---|
| 130 |
|
|---|
| 131 | /* A platform that has <sys/socket.h>. */
|
|---|
| 132 |
|
|---|
| 133 | /* For shutdown(). */
|
|---|
| 134 | # if !defined SHUT_RD
|
|---|
| 135 | # define SHUT_RD 0
|
|---|
| 136 | # endif
|
|---|
| 137 | # if !defined SHUT_WR
|
|---|
| 138 | # define SHUT_WR 1
|
|---|
| 139 | # endif
|
|---|
| 140 | # if !defined SHUT_RDWR
|
|---|
| 141 | # define SHUT_RDWR 2
|
|---|
| 142 | # endif
|
|---|
| 143 |
|
|---|
| 144 | # ifdef __VMS /* OpenVMS */
|
|---|
| 145 | # ifndef CMSG_SPACE
|
|---|
| 146 | # define CMSG_SPACE(length) _CMSG_SPACE(length)
|
|---|
| 147 | # endif
|
|---|
| 148 | # ifndef CMSG_LEN
|
|---|
| 149 | # define CMSG_LEN(length) _CMSG_LEN(length)
|
|---|
| 150 | # endif
|
|---|
| 151 | # endif
|
|---|
| 152 |
|
|---|
| 153 | #else
|
|---|
| 154 |
|
|---|
| 155 | # ifdef __CYGWIN__
|
|---|
| 156 | # error "Cygwin does have a sys/socket.h, doesn't it?!?"
|
|---|
| 157 | # endif
|
|---|
| 158 |
|
|---|
| 159 | /* A platform that lacks <sys/socket.h>.
|
|---|
| 160 |
|
|---|
| 161 | Currently only MinGW is supported. See the gnulib manual regarding
|
|---|
| 162 | Windows sockets. MinGW has the header files winsock2.h and
|
|---|
| 163 | ws2tcpip.h that declare the sys/socket.h definitions we need. Note
|
|---|
| 164 | that you can influence which definitions you get by setting the
|
|---|
| 165 | WINVER symbol before including these two files. For example,
|
|---|
| 166 | getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that
|
|---|
| 167 | symbol is set indirectly through WINVER). You can set this by
|
|---|
| 168 | adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your
|
|---|
| 169 | code may not run on older Windows releases then. My Windows 2000
|
|---|
| 170 | box was not able to run the code, for example. The situation is
|
|---|
| 171 | slightly confusing because
|
|---|
| 172 | <https://docs.microsoft.com/en-us/windows/desktop/api/ws2tcpip/nf-ws2tcpip-getaddrinfo>
|
|---|
| 173 | suggests that getaddrinfo should be available on all Windows
|
|---|
| 174 | releases. */
|
|---|
| 175 |
|
|---|
| 176 | # if @HAVE_WINSOCK2_H@
|
|---|
| 177 | # include <winsock2.h>
|
|---|
| 178 | # endif
|
|---|
| 179 | # if @HAVE_WS2TCPIP_H@
|
|---|
| 180 | # include <ws2tcpip.h>
|
|---|
| 181 | # endif
|
|---|
| 182 |
|
|---|
| 183 | /* For shutdown(). */
|
|---|
| 184 | # if !defined SHUT_RD && defined SD_RECEIVE
|
|---|
| 185 | # define SHUT_RD SD_RECEIVE
|
|---|
| 186 | # endif
|
|---|
| 187 | # if !defined SHUT_WR && defined SD_SEND
|
|---|
| 188 | # define SHUT_WR SD_SEND
|
|---|
| 189 | # endif
|
|---|
| 190 | # if !defined SHUT_RDWR && defined SD_BOTH
|
|---|
| 191 | # define SHUT_RDWR SD_BOTH
|
|---|
| 192 | # endif
|
|---|
| 193 |
|
|---|
| 194 | # if @HAVE_WINSOCK2_H@
|
|---|
| 195 | /* Include headers needed by the emulation code. */
|
|---|
| 196 | # include <sys/types.h>
|
|---|
| 197 | # include <io.h>
|
|---|
| 198 | /* If these headers don't define socklen_t, <config.h> does. */
|
|---|
| 199 | # endif
|
|---|
| 200 |
|
|---|
| 201 | /* Rudimentary 'struct msghdr'; this works as long as you don't try to
|
|---|
| 202 | access msg_control or msg_controllen. */
|
|---|
| 203 | struct msghdr {
|
|---|
| 204 | void *msg_name;
|
|---|
| 205 | socklen_t msg_namelen;
|
|---|
| 206 | struct iovec *msg_iov;
|
|---|
| 207 | int msg_iovlen;
|
|---|
| 208 | int msg_flags;
|
|---|
| 209 | };
|
|---|
| 210 |
|
|---|
| 211 | #endif
|
|---|
| 212 |
|
|---|
| 213 | /* Ensure SO_REUSEPORT is defined. */
|
|---|
| 214 | /* For the subtle differences between SO_REUSEPORT and SO_REUSEADDR, see
|
|---|
| 215 | https://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t
|
|---|
| 216 | and https://lwn.net/Articles/542629/
|
|---|
| 217 | */
|
|---|
| 218 | #ifndef SO_REUSEPORT
|
|---|
| 219 | # define SO_REUSEPORT SO_REUSEADDR
|
|---|
| 220 | #endif
|
|---|
| 221 |
|
|---|
| 222 | /* Fix some definitions from <winsock2.h>. */
|
|---|
| 223 |
|
|---|
| 224 | #if @HAVE_WINSOCK2_H@
|
|---|
| 225 |
|
|---|
| 226 | # if !GNULIB_defined_rpl_fd_isset
|
|---|
| 227 |
|
|---|
| 228 | /* Re-define FD_ISSET to avoid a WSA call while we are not using
|
|---|
| 229 | network sockets. */
|
|---|
| 230 | _GL_SYS_SOCKET_INLINE int
|
|---|
| 231 | rpl_fd_isset (SOCKET fd, fd_set * set)
|
|---|
| 232 | {
|
|---|
| 233 | u_int i;
|
|---|
| 234 | if (set == NULL)
|
|---|
| 235 | return 0;
|
|---|
| 236 |
|
|---|
| 237 | for (i = 0; i < set->fd_count; i++)
|
|---|
| 238 | if (set->fd_array[i] == fd)
|
|---|
| 239 | return 1;
|
|---|
| 240 |
|
|---|
| 241 | return 0;
|
|---|
| 242 | }
|
|---|
| 243 |
|
|---|
| 244 | # define GNULIB_defined_rpl_fd_isset 1
|
|---|
| 245 | # endif
|
|---|
| 246 |
|
|---|
| 247 | # undef FD_ISSET
|
|---|
| 248 | # define FD_ISSET(fd, set) rpl_fd_isset(fd, set)
|
|---|
| 249 |
|
|---|
| 250 | #endif
|
|---|
| 251 |
|
|---|
| 252 | /* Hide some function declarations from <winsock2.h>. */
|
|---|
| 253 |
|
|---|
| 254 | #if @HAVE_WINSOCK2_H@
|
|---|
| 255 | # if !defined _@GUARD_PREFIX@_UNISTD_H
|
|---|
| 256 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 257 | # undef close
|
|---|
| 258 | # define close close_used_without_including_unistd_h
|
|---|
| 259 | # elif !defined __clang__
|
|---|
| 260 | _GL_WARN_ON_USE (close,
|
|---|
| 261 | "close() used without including <unistd.h>");
|
|---|
| 262 | # endif
|
|---|
| 263 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 264 | # undef gethostname
|
|---|
| 265 | # define gethostname gethostname_used_without_including_unistd_h
|
|---|
| 266 | # else
|
|---|
| 267 | _GL_WARN_ON_USE (gethostname,
|
|---|
| 268 | "gethostname() used without including <unistd.h>");
|
|---|
| 269 | # endif
|
|---|
| 270 | # endif
|
|---|
| 271 | # if !defined _@GUARD_PREFIX@_SYS_SELECT_H
|
|---|
| 272 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 273 | # undef select
|
|---|
| 274 | # define select select_used_without_including_sys_select_h
|
|---|
| 275 | # else
|
|---|
| 276 | _GL_WARN_ON_USE (select,
|
|---|
| 277 | "select() used without including <sys/select.h>");
|
|---|
| 278 | # endif
|
|---|
| 279 | # endif
|
|---|
| 280 | #endif
|
|---|
| 281 |
|
|---|
| 282 | /* Wrap everything else to use libc file descriptors for sockets. */
|
|---|
| 283 |
|
|---|
| 284 | #if @GNULIB_SOCKET@
|
|---|
| 285 | # if @HAVE_WINSOCK2_H@
|
|---|
| 286 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 287 | # undef socket
|
|---|
| 288 | # define socket rpl_socket
|
|---|
| 289 | # endif
|
|---|
| 290 | _GL_FUNCDECL_RPL (socket, int, (int domain, int type, int protocol));
|
|---|
| 291 | _GL_CXXALIAS_RPL (socket, int, (int domain, int type, int protocol));
|
|---|
| 292 | # else
|
|---|
| 293 | _GL_CXXALIAS_SYS (socket, int, (int domain, int type, int protocol));
|
|---|
| 294 | # endif
|
|---|
| 295 | _GL_CXXALIASWARN (socket);
|
|---|
| 296 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 297 | # undef socket
|
|---|
| 298 | # define socket socket_used_without_requesting_gnulib_module_socket
|
|---|
| 299 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 300 | # undef socket
|
|---|
| 301 | # if HAVE_RAW_DECL_SOCKET
|
|---|
| 302 | _GL_WARN_ON_USE (socket, "socket is not always POSIX compliant - "
|
|---|
| 303 | "use gnulib module socket for portability");
|
|---|
| 304 | # endif
|
|---|
| 305 | #endif
|
|---|
| 306 |
|
|---|
| 307 | #if @GNULIB_CONNECT@
|
|---|
| 308 | # if @HAVE_WINSOCK2_H@
|
|---|
| 309 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 310 | # undef connect
|
|---|
| 311 | # define connect rpl_connect
|
|---|
| 312 | # endif
|
|---|
| 313 | _GL_FUNCDECL_RPL (connect, int,
|
|---|
| 314 | (int fd, const struct sockaddr *addr, socklen_t addrlen)
|
|---|
| 315 | _GL_ARG_NONNULL ((2)));
|
|---|
| 316 | _GL_CXXALIAS_RPL (connect, int,
|
|---|
| 317 | (int fd, const struct sockaddr *addr, socklen_t addrlen));
|
|---|
| 318 | # else
|
|---|
| 319 | /* Need to cast, because on NonStop Kernel, the third parameter is
|
|---|
| 320 | size_t addrlen. */
|
|---|
| 321 | _GL_CXXALIAS_SYS_CAST (connect, int,
|
|---|
| 322 | (int fd,
|
|---|
| 323 | const struct sockaddr *addr, socklen_t addrlen));
|
|---|
| 324 | # endif
|
|---|
| 325 | _GL_CXXALIASWARN (connect);
|
|---|
| 326 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 327 | # undef connect
|
|---|
| 328 | # define connect socket_used_without_requesting_gnulib_module_connect
|
|---|
| 329 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 330 | # undef connect
|
|---|
| 331 | # if HAVE_RAW_DECL_CONNECT
|
|---|
| 332 | _GL_WARN_ON_USE (connect, "connect is not always POSIX compliant - "
|
|---|
| 333 | "use gnulib module connect for portability");
|
|---|
| 334 | # endif
|
|---|
| 335 | #endif
|
|---|
| 336 |
|
|---|
| 337 | #if @GNULIB_ACCEPT@
|
|---|
| 338 | # if @HAVE_WINSOCK2_H@
|
|---|
| 339 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 340 | # undef accept
|
|---|
| 341 | # define accept rpl_accept
|
|---|
| 342 | # endif
|
|---|
| 343 | _GL_FUNCDECL_RPL (accept, int,
|
|---|
| 344 | (int fd,
|
|---|
| 345 | struct sockaddr *restrict addr,
|
|---|
| 346 | socklen_t *restrict addrlen));
|
|---|
| 347 | _GL_CXXALIAS_RPL (accept, int,
|
|---|
| 348 | (int fd,
|
|---|
| 349 | struct sockaddr *restrict addr,
|
|---|
| 350 | socklen_t *restrict addrlen));
|
|---|
| 351 | # else
|
|---|
| 352 | /* Need to cast, because on Solaris 10 systems, the third parameter is
|
|---|
| 353 | void *addrlen. */
|
|---|
| 354 | _GL_CXXALIAS_SYS_CAST (accept, int,
|
|---|
| 355 | (int fd,
|
|---|
| 356 | struct sockaddr *restrict addr,
|
|---|
| 357 | socklen_t *restrict addrlen));
|
|---|
| 358 | # endif
|
|---|
| 359 | _GL_CXXALIASWARN (accept);
|
|---|
| 360 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 361 | # undef accept
|
|---|
| 362 | # define accept accept_used_without_requesting_gnulib_module_accept
|
|---|
| 363 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 364 | # undef accept
|
|---|
| 365 | # if HAVE_RAW_DECL_ACCEPT
|
|---|
| 366 | _GL_WARN_ON_USE (accept, "accept is not always POSIX compliant - "
|
|---|
| 367 | "use gnulib module accept for portability");
|
|---|
| 368 | # endif
|
|---|
| 369 | #endif
|
|---|
| 370 |
|
|---|
| 371 | #if @GNULIB_BIND@
|
|---|
| 372 | # if @HAVE_WINSOCK2_H@
|
|---|
| 373 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 374 | # undef bind
|
|---|
| 375 | # define bind rpl_bind
|
|---|
| 376 | # endif
|
|---|
| 377 | _GL_FUNCDECL_RPL (bind, int,
|
|---|
| 378 | (int fd, const struct sockaddr *addr, socklen_t addrlen)
|
|---|
| 379 | _GL_ARG_NONNULL ((2)));
|
|---|
| 380 | _GL_CXXALIAS_RPL (bind, int,
|
|---|
| 381 | (int fd, const struct sockaddr *addr, socklen_t addrlen));
|
|---|
| 382 | # else
|
|---|
| 383 | /* Need to cast, because on NonStop Kernel, the third parameter is
|
|---|
| 384 | size_t addrlen. */
|
|---|
| 385 | _GL_CXXALIAS_SYS_CAST (bind, int,
|
|---|
| 386 | (int fd,
|
|---|
| 387 | const struct sockaddr *addr, socklen_t addrlen));
|
|---|
| 388 | # endif
|
|---|
| 389 | _GL_CXXALIASWARN (bind);
|
|---|
| 390 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 391 | # undef bind
|
|---|
| 392 | # define bind bind_used_without_requesting_gnulib_module_bind
|
|---|
| 393 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 394 | # undef bind
|
|---|
| 395 | # if HAVE_RAW_DECL_BIND
|
|---|
| 396 | _GL_WARN_ON_USE (bind, "bind is not always POSIX compliant - "
|
|---|
| 397 | "use gnulib module bind for portability");
|
|---|
| 398 | # endif
|
|---|
| 399 | #endif
|
|---|
| 400 |
|
|---|
| 401 | #if @GNULIB_GETPEERNAME@
|
|---|
| 402 | # if @HAVE_WINSOCK2_H@
|
|---|
| 403 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 404 | # undef getpeername
|
|---|
| 405 | # define getpeername rpl_getpeername
|
|---|
| 406 | # endif
|
|---|
| 407 | _GL_FUNCDECL_RPL (getpeername, int,
|
|---|
| 408 | (int fd, struct sockaddr *restrict addr,
|
|---|
| 409 | socklen_t *restrict addrlen)
|
|---|
| 410 | _GL_ARG_NONNULL ((2, 3)));
|
|---|
| 411 | _GL_CXXALIAS_RPL (getpeername, int,
|
|---|
| 412 | (int fd, struct sockaddr *restrict addr,
|
|---|
| 413 | socklen_t *restrict addrlen));
|
|---|
| 414 | # else
|
|---|
| 415 | /* Need to cast, because on Solaris 10 systems, the third parameter is
|
|---|
| 416 | void *addrlen. */
|
|---|
| 417 | _GL_CXXALIAS_SYS_CAST (getpeername, int,
|
|---|
| 418 | (int fd, struct sockaddr *restrict addr,
|
|---|
| 419 | socklen_t *restrict addrlen));
|
|---|
| 420 | # endif
|
|---|
| 421 | _GL_CXXALIASWARN (getpeername);
|
|---|
| 422 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 423 | # undef getpeername
|
|---|
| 424 | # define getpeername getpeername_used_without_requesting_gnulib_module_getpeername
|
|---|
| 425 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 426 | # undef getpeername
|
|---|
| 427 | # if HAVE_RAW_DECL_GETPEERNAME
|
|---|
| 428 | _GL_WARN_ON_USE (getpeername, "getpeername is not always POSIX compliant - "
|
|---|
| 429 | "use gnulib module getpeername for portability");
|
|---|
| 430 | # endif
|
|---|
| 431 | #endif
|
|---|
| 432 |
|
|---|
| 433 | #if @GNULIB_GETSOCKNAME@
|
|---|
| 434 | # if @HAVE_WINSOCK2_H@
|
|---|
| 435 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 436 | # undef getsockname
|
|---|
| 437 | # define getsockname rpl_getsockname
|
|---|
| 438 | # endif
|
|---|
| 439 | _GL_FUNCDECL_RPL (getsockname, int,
|
|---|
| 440 | (int fd, struct sockaddr *restrict addr,
|
|---|
| 441 | socklen_t *restrict addrlen)
|
|---|
| 442 | _GL_ARG_NONNULL ((2, 3)));
|
|---|
| 443 | _GL_CXXALIAS_RPL (getsockname, int,
|
|---|
| 444 | (int fd, struct sockaddr *restrict addr,
|
|---|
| 445 | socklen_t *restrict addrlen));
|
|---|
| 446 | # else
|
|---|
| 447 | /* Need to cast, because on Solaris 10 systems, the third parameter is
|
|---|
| 448 | void *addrlen. */
|
|---|
| 449 | _GL_CXXALIAS_SYS_CAST (getsockname, int,
|
|---|
| 450 | (int fd, struct sockaddr *restrict addr,
|
|---|
| 451 | socklen_t *restrict addrlen));
|
|---|
| 452 | # endif
|
|---|
| 453 | _GL_CXXALIASWARN (getsockname);
|
|---|
| 454 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 455 | # undef getsockname
|
|---|
| 456 | # define getsockname getsockname_used_without_requesting_gnulib_module_getsockname
|
|---|
| 457 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 458 | # undef getsockname
|
|---|
| 459 | # if HAVE_RAW_DECL_GETSOCKNAME
|
|---|
| 460 | _GL_WARN_ON_USE (getsockname, "getsockname is not always POSIX compliant - "
|
|---|
| 461 | "use gnulib module getsockname for portability");
|
|---|
| 462 | # endif
|
|---|
| 463 | #endif
|
|---|
| 464 |
|
|---|
| 465 | #if @GNULIB_GETSOCKOPT@
|
|---|
| 466 | # if @HAVE_WINSOCK2_H@
|
|---|
| 467 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 468 | # undef getsockopt
|
|---|
| 469 | # define getsockopt rpl_getsockopt
|
|---|
| 470 | # endif
|
|---|
| 471 | _GL_FUNCDECL_RPL (getsockopt, int,
|
|---|
| 472 | (int fd, int level, int optname,
|
|---|
| 473 | void *restrict optval, socklen_t *restrict optlen)
|
|---|
| 474 | _GL_ARG_NONNULL ((4, 5)));
|
|---|
| 475 | _GL_CXXALIAS_RPL (getsockopt, int,
|
|---|
| 476 | (int fd, int level, int optname,
|
|---|
| 477 | void *restrict optval, socklen_t *restrict optlen));
|
|---|
| 478 | # else
|
|---|
| 479 | /* Need to cast, because on Solaris 10 systems, the fifth parameter is
|
|---|
| 480 | void *optlen. */
|
|---|
| 481 | _GL_CXXALIAS_SYS_CAST (getsockopt, int,
|
|---|
| 482 | (int fd, int level, int optname,
|
|---|
| 483 | void *restrict optval, socklen_t *restrict optlen));
|
|---|
| 484 | # endif
|
|---|
| 485 | _GL_CXXALIASWARN (getsockopt);
|
|---|
| 486 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 487 | # undef getsockopt
|
|---|
| 488 | # define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt
|
|---|
| 489 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 490 | # undef getsockopt
|
|---|
| 491 | # if HAVE_RAW_DECL_GETSOCKOPT
|
|---|
| 492 | _GL_WARN_ON_USE (getsockopt, "getsockopt is not always POSIX compliant - "
|
|---|
| 493 | "use gnulib module getsockopt for portability");
|
|---|
| 494 | # endif
|
|---|
| 495 | #endif
|
|---|
| 496 |
|
|---|
| 497 | #if @GNULIB_LISTEN@
|
|---|
| 498 | # if @HAVE_WINSOCK2_H@
|
|---|
| 499 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 500 | # undef listen
|
|---|
| 501 | # define listen rpl_listen
|
|---|
| 502 | # endif
|
|---|
| 503 | _GL_FUNCDECL_RPL (listen, int, (int fd, int backlog));
|
|---|
| 504 | _GL_CXXALIAS_RPL (listen, int, (int fd, int backlog));
|
|---|
| 505 | # else
|
|---|
| 506 | _GL_CXXALIAS_SYS (listen, int, (int fd, int backlog));
|
|---|
| 507 | # endif
|
|---|
| 508 | _GL_CXXALIASWARN (listen);
|
|---|
| 509 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 510 | # undef listen
|
|---|
| 511 | # define listen listen_used_without_requesting_gnulib_module_listen
|
|---|
| 512 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 513 | # undef listen
|
|---|
| 514 | # if HAVE_RAW_DECL_LISTEN
|
|---|
| 515 | _GL_WARN_ON_USE (listen, "listen is not always POSIX compliant - "
|
|---|
| 516 | "use gnulib module listen for portability");
|
|---|
| 517 | # endif
|
|---|
| 518 | #endif
|
|---|
| 519 |
|
|---|
| 520 | #if @GNULIB_RECV@
|
|---|
| 521 | # if @HAVE_WINSOCK2_H@
|
|---|
| 522 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 523 | # undef recv
|
|---|
| 524 | # define recv rpl_recv
|
|---|
| 525 | # endif
|
|---|
| 526 | _GL_FUNCDECL_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags)
|
|---|
| 527 | _GL_ARG_NONNULL ((2)));
|
|---|
| 528 | _GL_CXXALIAS_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags));
|
|---|
| 529 | # else
|
|---|
| 530 | /* Need to cast, because on HP-UX 11.31 the return type may be
|
|---|
| 531 | int,
|
|---|
| 532 | depending on compiler options. */
|
|---|
| 533 | _GL_CXXALIAS_SYS_CAST (recv, ssize_t, (int fd, void *buf, size_t len, int flags));
|
|---|
| 534 | # endif
|
|---|
| 535 | _GL_CXXALIASWARN (recv);
|
|---|
| 536 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 537 | # undef recv
|
|---|
| 538 | # define recv recv_used_without_requesting_gnulib_module_recv
|
|---|
| 539 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 540 | # undef recv
|
|---|
| 541 | # if HAVE_RAW_DECL_RECV
|
|---|
| 542 | _GL_WARN_ON_USE (recv, "recv is not always POSIX compliant - "
|
|---|
| 543 | "use gnulib module recv for portability");
|
|---|
| 544 | # endif
|
|---|
| 545 | #endif
|
|---|
| 546 |
|
|---|
| 547 | #if @GNULIB_SEND@
|
|---|
| 548 | # if @HAVE_WINSOCK2_H@
|
|---|
| 549 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 550 | # undef send
|
|---|
| 551 | # define send rpl_send
|
|---|
| 552 | # endif
|
|---|
| 553 | _GL_FUNCDECL_RPL (send, ssize_t,
|
|---|
| 554 | (int fd, const void *buf, size_t len, int flags)
|
|---|
| 555 | _GL_ARG_NONNULL ((2)));
|
|---|
| 556 | _GL_CXXALIAS_RPL (send, ssize_t,
|
|---|
| 557 | (int fd, const void *buf, size_t len, int flags));
|
|---|
| 558 | # else
|
|---|
| 559 | /* Need to cast, because on HP-UX 11.31 the return type may be
|
|---|
| 560 | int,
|
|---|
| 561 | depending on compiler options. */
|
|---|
| 562 | _GL_CXXALIAS_SYS_CAST (send, ssize_t,
|
|---|
| 563 | (int fd, const void *buf, size_t len, int flags));
|
|---|
| 564 | # endif
|
|---|
| 565 | _GL_CXXALIASWARN (send);
|
|---|
| 566 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 567 | # undef send
|
|---|
| 568 | # define send send_used_without_requesting_gnulib_module_send
|
|---|
| 569 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 570 | # undef send
|
|---|
| 571 | # if HAVE_RAW_DECL_SEND
|
|---|
| 572 | _GL_WARN_ON_USE (send, "send is not always POSIX compliant - "
|
|---|
| 573 | "use gnulib module send for portability");
|
|---|
| 574 | # endif
|
|---|
| 575 | #endif
|
|---|
| 576 |
|
|---|
| 577 | #if @GNULIB_RECVFROM@
|
|---|
| 578 | # if @HAVE_WINSOCK2_H@
|
|---|
| 579 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 580 | # undef recvfrom
|
|---|
| 581 | # define recvfrom rpl_recvfrom
|
|---|
| 582 | # endif
|
|---|
| 583 | _GL_FUNCDECL_RPL (recvfrom, ssize_t,
|
|---|
| 584 | (int fd, void *restrict buf, size_t len, int flags,
|
|---|
| 585 | struct sockaddr *restrict from,
|
|---|
| 586 | socklen_t *restrict fromlen)
|
|---|
| 587 | _GL_ARG_NONNULL ((2)));
|
|---|
| 588 | _GL_CXXALIAS_RPL (recvfrom, ssize_t,
|
|---|
| 589 | (int fd, void *restrict buf, size_t len, int flags,
|
|---|
| 590 | struct sockaddr *restrict from,
|
|---|
| 591 | socklen_t *restrict fromlen));
|
|---|
| 592 | # else
|
|---|
| 593 | /* Need to cast, because on Solaris 10 systems, the sixth parameter is
|
|---|
| 594 | void *fromlen. */
|
|---|
| 595 | _GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t,
|
|---|
| 596 | (int fd, void *restrict buf, size_t len, int flags,
|
|---|
| 597 | struct sockaddr *restrict from,
|
|---|
| 598 | socklen_t *restrict fromlen));
|
|---|
| 599 | # endif
|
|---|
| 600 | _GL_CXXALIASWARN (recvfrom);
|
|---|
| 601 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 602 | # undef recvfrom
|
|---|
| 603 | # define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom
|
|---|
| 604 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 605 | # undef recvfrom
|
|---|
| 606 | # if HAVE_RAW_DECL_RECVFROM
|
|---|
| 607 | _GL_WARN_ON_USE (recvfrom, "recvfrom is not always POSIX compliant - "
|
|---|
| 608 | "use gnulib module recvfrom for portability");
|
|---|
| 609 | # endif
|
|---|
| 610 | #endif
|
|---|
| 611 |
|
|---|
| 612 | #if @GNULIB_SENDTO@
|
|---|
| 613 | # if @HAVE_WINSOCK2_H@
|
|---|
| 614 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 615 | # undef sendto
|
|---|
| 616 | # define sendto rpl_sendto
|
|---|
| 617 | # endif
|
|---|
| 618 | _GL_FUNCDECL_RPL (sendto, ssize_t,
|
|---|
| 619 | (int fd, const void *buf, size_t len, int flags,
|
|---|
| 620 | const struct sockaddr *to, socklen_t tolen)
|
|---|
| 621 | _GL_ARG_NONNULL ((2)));
|
|---|
| 622 | _GL_CXXALIAS_RPL (sendto, ssize_t,
|
|---|
| 623 | (int fd, const void *buf, size_t len, int flags,
|
|---|
| 624 | const struct sockaddr *to, socklen_t tolen));
|
|---|
| 625 | # else
|
|---|
| 626 | /* Need to cast, because on NonStop Kernel, the sixth parameter is
|
|---|
| 627 | size_t tolen. */
|
|---|
| 628 | _GL_CXXALIAS_SYS_CAST (sendto, ssize_t,
|
|---|
| 629 | (int fd, const void *buf, size_t len, int flags,
|
|---|
| 630 | const struct sockaddr *to, socklen_t tolen));
|
|---|
| 631 | # endif
|
|---|
| 632 | _GL_CXXALIASWARN (sendto);
|
|---|
| 633 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 634 | # undef sendto
|
|---|
| 635 | # define sendto sendto_used_without_requesting_gnulib_module_sendto
|
|---|
| 636 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 637 | # undef sendto
|
|---|
| 638 | # if HAVE_RAW_DECL_SENDTO
|
|---|
| 639 | _GL_WARN_ON_USE (sendto, "sendto is not always POSIX compliant - "
|
|---|
| 640 | "use gnulib module sendto for portability");
|
|---|
| 641 | # endif
|
|---|
| 642 | #endif
|
|---|
| 643 |
|
|---|
| 644 | #if @GNULIB_SETSOCKOPT@
|
|---|
| 645 | # if @HAVE_WINSOCK2_H@
|
|---|
| 646 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 647 | # undef setsockopt
|
|---|
| 648 | # define setsockopt rpl_setsockopt
|
|---|
| 649 | # endif
|
|---|
| 650 | _GL_FUNCDECL_RPL (setsockopt, int, (int fd, int level, int optname,
|
|---|
| 651 | const void * optval, socklen_t optlen)
|
|---|
| 652 | _GL_ARG_NONNULL ((4)));
|
|---|
| 653 | _GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname,
|
|---|
| 654 | const void * optval, socklen_t optlen));
|
|---|
| 655 | # else
|
|---|
| 656 | /* Need to cast, because on NonStop Kernel, the fifth parameter is
|
|---|
| 657 | size_t optlen. */
|
|---|
| 658 | _GL_CXXALIAS_SYS_CAST (setsockopt, int,
|
|---|
| 659 | (int fd, int level, int optname,
|
|---|
| 660 | const void * optval, socklen_t optlen));
|
|---|
| 661 | # endif
|
|---|
| 662 | _GL_CXXALIASWARN (setsockopt);
|
|---|
| 663 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 664 | # undef setsockopt
|
|---|
| 665 | # define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt
|
|---|
| 666 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 667 | # undef setsockopt
|
|---|
| 668 | # if HAVE_RAW_DECL_SETSOCKOPT
|
|---|
| 669 | _GL_WARN_ON_USE (setsockopt, "setsockopt is not always POSIX compliant - "
|
|---|
| 670 | "use gnulib module setsockopt for portability");
|
|---|
| 671 | # endif
|
|---|
| 672 | #endif
|
|---|
| 673 |
|
|---|
| 674 | #if @GNULIB_SHUTDOWN@
|
|---|
| 675 | # if @HAVE_WINSOCK2_H@
|
|---|
| 676 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 677 | # undef shutdown
|
|---|
| 678 | # define shutdown rpl_shutdown
|
|---|
| 679 | # endif
|
|---|
| 680 | _GL_FUNCDECL_RPL (shutdown, int, (int fd, int how));
|
|---|
| 681 | _GL_CXXALIAS_RPL (shutdown, int, (int fd, int how));
|
|---|
| 682 | # else
|
|---|
| 683 | _GL_CXXALIAS_SYS (shutdown, int, (int fd, int how));
|
|---|
| 684 | # endif
|
|---|
| 685 | _GL_CXXALIASWARN (shutdown);
|
|---|
| 686 | #elif @HAVE_WINSOCK2_H@
|
|---|
| 687 | # undef shutdown
|
|---|
| 688 | # define shutdown shutdown_used_without_requesting_gnulib_module_shutdown
|
|---|
| 689 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 690 | # undef shutdown
|
|---|
| 691 | # if HAVE_RAW_DECL_SHUTDOWN
|
|---|
| 692 | _GL_WARN_ON_USE (shutdown, "shutdown is not always POSIX compliant - "
|
|---|
| 693 | "use gnulib module shutdown for portability");
|
|---|
| 694 | # endif
|
|---|
| 695 | #endif
|
|---|
| 696 |
|
|---|
| 697 | #if @GNULIB_ACCEPT4@
|
|---|
| 698 | /* Accept a connection on a socket, with specific opening flags.
|
|---|
| 699 | The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
|
|---|
| 700 | and O_TEXT, O_BINARY (defined in "binary-io.h").
|
|---|
| 701 | See also the Linux man page at
|
|---|
| 702 | <https://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html>. */
|
|---|
| 703 | # if @HAVE_ACCEPT4@
|
|---|
| 704 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
|---|
| 705 | # define accept4 rpl_accept4
|
|---|
| 706 | # endif
|
|---|
| 707 | _GL_FUNCDECL_RPL (accept4, int,
|
|---|
| 708 | (int sockfd, struct sockaddr *addr, socklen_t *addrlen,
|
|---|
| 709 | int flags));
|
|---|
| 710 | _GL_CXXALIAS_RPL (accept4, int,
|
|---|
| 711 | (int sockfd, struct sockaddr *addr, socklen_t *addrlen,
|
|---|
| 712 | int flags));
|
|---|
| 713 | # else
|
|---|
| 714 | _GL_FUNCDECL_SYS (accept4, int,
|
|---|
| 715 | (int sockfd, struct sockaddr *addr, socklen_t *addrlen,
|
|---|
| 716 | int flags));
|
|---|
| 717 | _GL_CXXALIAS_SYS (accept4, int,
|
|---|
| 718 | (int sockfd, struct sockaddr *addr, socklen_t *addrlen,
|
|---|
| 719 | int flags));
|
|---|
| 720 | # endif
|
|---|
| 721 | _GL_CXXALIASWARN (accept4);
|
|---|
| 722 | #elif defined GNULIB_POSIXCHECK
|
|---|
| 723 | # undef accept4
|
|---|
| 724 | # if HAVE_RAW_DECL_ACCEPT4
|
|---|
| 725 | _GL_WARN_ON_USE (accept4, "accept4 is unportable - "
|
|---|
| 726 | "use gnulib module accept4 for portability");
|
|---|
| 727 | # endif
|
|---|
| 728 | #endif
|
|---|
| 729 |
|
|---|
| 730 | _GL_INLINE_HEADER_END
|
|---|
| 731 |
|
|---|
| 732 | #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */
|
|---|
| 733 | #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */
|
|---|
| 734 | #endif
|
|---|