@node sys/socket.h
@section @file{sys/socket.h}

POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/sys_socket.h.html}

Gnulib module: sys_socket-h
@mindex sys_socket-h

Portability problems fixed by Gnulib:
@itemize
@item
This header file is missing on some platforms:
mingw, MSVC 14.
@item
This header file is not self-contained on some platforms: it requires
@code{<sys/types.h>} to be included first.
@item
This header file does not define the type @code{struct iovec} on some platforms:
OpenBSD 4.4.
@item
This header file is lacking the @code{SHUT_RD}, @code{SHUT_WR},
@code{SHUT_RDWR} macros on some platforms, despite having the @code{shutdown}
functions:
emx+gcc.
@item
The @code{struct sockaddr_storage} type does not have a member @code{ss_family}
on some platforms:
AIX 7.1.
@item
The @code{CMSG_SPACE} and @code{CMSG_LEN} macros are not provided on some
platforms:
OpenVMS.
@item
This header file does not define the @code{SO_REUSEPORT} macro on some
platforms:
Minix 3.1.8, Solaris 10, Cygwin, mingw, MSVC 14.
@end itemize

Portability problems not fixed by Gnulib:
@itemize
@item
This header file does not declare the @code{msg_control} and
@code{msg_controllen} members of @code{struct msghdr} on some
platforms.  This can be detected by the absence of the
@code{CMSG_FIRSTHDR} macro:
gnulib replacement header, old BSD
@item
This header file does not define the macro @code{SOCK_NONBLOCK}
on some platforms:
macOS 15, AIX 7.3, Solaris 10, mingw, MSVC 14.
@item
This header file does not define the macros @code{SOCK_CLOEXEC} and
@code{MSG_CMSG_CLOEXEC} on some platforms:
macOS 15, AIX 7.3, Solaris 10, mingw, MSVC 14.
@item
This header file does not define the macro @code{MSG_CMSG_CLOEXEC}
on some platforms:
Solaris 11 OmniOS.
@item
Although POSIX.1-2024 standardized @code{SOCK_CLOFORK} and
@code{MSG_CMSG_CLOFORK}, no known platform supports them.
@item
This header file does not define the macro @code{SO_DOMAIN} on some platforms:
macOS 15, NetBSD 10.0, AIX 7.3, Cygwin 3.5, mingw, MSVC 14.
@item
This header file does not define the macro @code{SO_PROTOCOL} on some platforms:
macOS 15, NetBSD 10.0, AIX 7.3, Solaris 11.4, Cygwin 3.5, mingw, MSVC 14.
@item
This header file does not define the macro @code{MSG_NOSIGNAL}
on some platforms:
Solaris 10, mingw, MSVC 14.
@item
This header file does not define the macro @code{MSG_EOR} on some platforms:
mingw, MSVC 14.
@item
This header file does not define the macros @code{MSG_CTRUNC} and
@code{MSG_TRUNC} on some platforms:
mingw.
@item
This header file does not define the macro @code{MSG_WAITALL} on some platforms:
MSVC 14.
@item
This header file does not define the type @code{struct cmsghdr} and
the constant @code{SCM_RIGHTS} on some platforms:
mingw, MSVC 14.
@item
This header file does not define the constant @code{SOCK_CLOFORK}
on some platforms:
glibc 2.42, musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Solaris 11.3, Cygwin, mingw, MSVC, Android.
@item
This header file does not define the constant @code{MSG_CMSG_CLOFORK}
on some platforms:
glibc 2.42, musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Solaris 11.4, Cygwin, mingw, MSVC, Android.
@item
POSIX.1-2024 allows, but does not require, this file to make visible
all symbols from the header @code{<sys/uio.h>}.
Programs should not assume that these other symbols are visible merely
because this file is included, or that they are invisible because only
this file is included.
@end itemize
