sys/socket.h - Internet Protocol family
#include <sys/socket.h>
<sys/socket.h> makes available a type, socklen_t, which is an unsigned opaque integral type of length of at least 32 bits. To forestall portability problems, it is recommended that applications should not use values larger than 232 - 1.The <sys/socket.h> header defines the unsigned integral type sa_family_t.
The <sys/socket.h> header defines the sockaddr structure that includes at least the following members:
The <sys/socket.h> header defines the msghdr structure that includes at least the following members:sa_family_t sa_family address family char sa_data[] socket address (variable-length data)
The <sys/socket.h> header defines the cmsghdr structure that includes at least the following members:void *msg_name optional address socklen_t msg_namelen size of address struct iovec *msg_iov scatter/gather array int msg_iovlen members in msg_iov void *msg_control ancillary data, see below socklen_t msg_controllen ancillary data buffer len int msg_flags flags on received message
Ancillary data consists of a sequence of pairs, each consisting of a cmsghdr structure followed by a data array. The data array contains the ancillary data message, and the cmsghdr structure contains descriptive information that allows an application to correctly parse the data.socklen_t cmsg_len data byte count, including the cmsghdr int cmsg_level originating protocol int cmsg_type protocol-specific type
The values for cmsg_level will be legal values for the level argument to the getsockopt() and setsockopt() functions. The system documentation should specify the cmsg_type definitions for the supported protocols.
Ancillary data is also possible at the socket level. The <sys/socket.h> header defines the following macro for use as the cmsg_type value when cmsg_level is SOL_SOCKET:
- SCM_RIGHTS
- Indicates that the data array contains the access rights to be sent or received.
The <sys/socket.h> header defines the following macros to gain access to the data arrays in the ancillary data associated with a message header:
- CMSG_DATA(cmsg)
- If the argument is a pointer to a cmsghdr structure, this macro returns an unsigned character pointer to the data array associated with the cmsghdr structure.
- CMSG_NXTHDR(mhdr,cmsg)
If the first argument is a pointer to a msghdr structure and the second argument is a pointer to a cmsghdr structure in the ancillary data, pointed to by the msg_control field of that msghdr structure, this macro returns a pointer to the next cmsghdr structure, or a null pointer if this structure is the last cmsghdr in the ancillary data.- CMSG_FIRSTHDR(mhdr)
If the argument is a pointer to a msghdr structure, this macro returns a pointer to the first cmsghdr structure in the ancillary data associated with this msghdr structure, or a null pointer if there is no ancillary data associated with the msghdr structure.The <sys/socket.h> header defines the linger structure that includes at least the following members:
The <sys/socket.h> header defines the following macros, with distinct integral values:int l_onoff indicates whether linger option is enabled int l_linger linger time, in seconds
- SOCK_DGRAM
- Datagram socket
- SOCK_STREAM
- Byte-stream socket
- SOCK_SEQPACKET
- Sequenced-packet socket
The <sys/socket.h> header defines the following macro for use as the level argument of setsockopt() and getsockopt().
- SOL_SOCKET
- Options to be accessed at socket level, not protocol level.
The <sys/socket.h> header defines the following macros, with distinct integral values, for use as the option_name argument in getsockopt() or setsockopt() calls:
- SO_ACCEPTCONN
- Socket is accepting connections.
- SO_BROADCAST
- Transmission of broadcast messages is supported.
- SO_DEBUG
- Debugging information is being recorded.
- SO_DONTROUTE
- bypass normal routing
- SO_ERROR
- Socket error status.
- SO_KEEPALIVE
- Connections are kept alive with periodic messages.
- SO_LINGER
- Socket lingers on close.
- SO_OOBINLINE
- Out-of-band data is transmitted in line.
- SO_RCVBUF
- Receive buffer size.
- SO_RCVLOWAT
- receive "low water mark"
- SO_RCVTIMEO
- receive timeout
- SO_REUSEADDR
- Reuse of local addresses is supported.
- SO_SNDBUF
- Send buffer size.
- SO_SNDLOWAT
- send "low water mark"
- SO_SNDTIMEO
- send timeout
- SO_TYPE
- Socket type.
The <sys/socket.h> header defines the following macros, with distinct integral values, for use as the valid values for the msg_flags field in the msghdr structure, or the flags parameter in recvfrom(), recvmsg(), sendto() or sendmsg() calls:
- MSG_CTRUNC
- Control data truncated.
- MSG_DONTROUTE
- Send without using routing tables.
- MSG_EOR
- Terminates a record (if supported by the protocol).
- MSG_OOB
- Out-of-band data.
- MSG_PEEK
- Leave received data in queue.
- MSG_TRUNC
- Normal data truncated.
- MSG_WAITALL
- Wait for complete message.
The <sys/socket.h> header defines the following macros, with distinct integral values:
- AF_UNIX
- UNIX domain sockets
- AF_UNSPEC
- Unspecified
- AF_INET
- Internet domain sockets
The <sys/socket.h> header defines the following macros, with distinct integral values:
- SHUT_RD
- Disables further receive operations.
- SHUT_WR
- Disables further send operations.
- SHUT_RDWR
- Disables further send and receive operations.
The following are declared as functions, and may also be defined as macros:
int accept(int socket, struct sockaddr *address, socklen_t *address_len); int bind(int socket, const struct sockaddr *address, socklen_t address_len); int connect(int socket, const struct sockaddr *address, socklen_t address_len); int getpeername(int socket, struct sockaddr *address, socklen_t *address_len); int getsockname(int socket, struct sockaddr *address, socklen_t *address_len); int getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len); int listen(int socket, int backlog); ssize_t recv(int socket, void *buffer, size_t length, int flags); ssize_t recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len); ssize_t recvmsg(int socket, struct msghdr *message, int flags); ssize_t send(int socket, const void *message, size_t length, int flags); ssize_t sendmsg(int socket, const struct msghdr *message, int flags); ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len); int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len); int shutdown(int socket, int how); int socket(int domain, int type, int protocol); int socketpair(int domain, int type, int protocol, int socket_vector[2]);
accept(), bind(), connect(), getpeername(), getsockname(), getsockopt(), listen(), recv(), recvfrom(), recvmsg(), send(), sendmsg(), sendto(), setsockopt(), shutdown(), socket(), socketpair().