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 program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU Lesser General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 This program 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 735