From fc22b3d6507c6745911b9dfcc68f1e665ae13dbc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 21:43:11 +0200 Subject: Adding upstream version 4.22.0. Signed-off-by: Daniel Baumann --- upstream/archlinux/man0p/sys_socket.h.0p | 567 +++++++++++++++++++++++++++++++ 1 file changed, 567 insertions(+) create mode 100644 upstream/archlinux/man0p/sys_socket.h.0p (limited to 'upstream/archlinux/man0p/sys_socket.h.0p') diff --git a/upstream/archlinux/man0p/sys_socket.h.0p b/upstream/archlinux/man0p/sys_socket.h.0p new file mode 100644 index 00000000..02b7e4b4 --- /dev/null +++ b/upstream/archlinux/man0p/sys_socket.h.0p @@ -0,0 +1,567 @@ +'\" et +.TH sys_socket.h "0P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual" +.\" +.SH PROLOG +This manual page is part of the POSIX Programmer's Manual. +The Linux implementation of this interface may differ (consult +the corresponding Linux manual page for details of Linux behavior), +or the interface may not be implemented on Linux. +.\" +.SH NAME +sys/socket.h +\(em main sockets header +.SH SYNOPSIS +.LP +.nf +#include +.fi +.SH DESCRIPTION +The +.IR +header shall define the +.BR socklen_t +type, which is an integer type of width of at least 32 bits; +see APPLICATION USAGE. +.P +The +.IR +header shall define the +.BR sa_family_t +unsigned integer type. +.P +The +.IR +header shall define the +.BR sockaddr +structure, which shall include at least the following members: +.sp +.RS 4 +.nf + +sa_family_t sa_family \fRAddress family.\fR +char sa_data[] \fRSocket address (variable-length data).\fR +.fi +.P +.RE +.P +The +.BR sockaddr +structure is used to define a socket address which is used +in the +\fIbind\fR(), +\fIconnect\fR(), +\fIgetpeername\fR(), +\fIgetsockname\fR(), +\fIrecvfrom\fR(), +and +\fIsendto\fR() +functions. +.P +The +.IR +header shall define the +.BR sockaddr_storage +structure, which shall be: +.IP " *" 4 +Large enough to accommodate all supported protocol-specific address +structures +.IP " *" 4 +Aligned at an appropriate boundary so that pointers to it can be cast +as pointers to protocol-specific address structures and used to access +the fields of those structures without alignment problems +.P +The +.BR sockaddr_storage +structure shall include at least the following members: +.sp +.RS 4 +.nf + +sa_family_t ss_family +.fi +.P +.RE +.P +When a pointer to a +.BR sockaddr_storage +structure is cast as a pointer to a +.BR sockaddr +structure, the +.IR ss_family +field of the +.BR sockaddr_storage +structure shall map onto the +.IR sa_family +field of the +.BR sockaddr +structure. When a pointer to a +.BR sockaddr_storage +structure is cast as a pointer to a protocol-specific address structure, +the +.IR ss_family +field shall map onto +a field of that structure that is of type +.BR sa_family_t +and that identifies the protocol's address family. +.P +The +.IR +header shall define the +.BR msghdr +structure, which shall include at least the following members: +.sp +.RS 4 +.nf + +void *msg_name \fROptional address.\fR +socklen_t msg_namelen \fRSize of address.\fR +struct iovec *msg_iov \fRScatter/gather array.\fR +int msg_iovlen \fRMembers in \fImsg_iov\fR.\fR +void *msg_control \fRAncillary data; see below.\fR +socklen_t msg_controllen \fRAncillary data buffer \fIlen\fR.\fR +int msg_flags \fRFlags on received message.\fR +.fi +.P +.RE +.P +The +.BR msghdr +structure is used to minimize the number of directly supplied +parameters to the +\fIrecvmsg\fR() +and +\fIsendmsg\fR() +functions. This structure is used as a +.IR value \(hy\c +.IR result +parameter in the +\fIrecvmsg\fR() +function and +.IR value +only for the +\fIsendmsg\fR() +function. +.P +The +.IR +header shall define the +.BR iovec +structure as described in +.IR . +.P +The +.IR +header shall define the +.BR cmsghdr +structure, which shall include at least the following members: +.sp +.RS 4 +.nf + +socklen_t cmsg_len \fRData byte count, including the \fBcmsghdr\fR.\fR +int cmsg_level \fROriginating protocol.\fR +int cmsg_type \fRProtocol-specific type.\fR +.fi +.P +.RE +.P +The +.BR cmsghdr +structure is used for storage of ancillary data object information. +.P +Ancillary data consists of a sequence of pairs, each consisting of a +.BR cmsghdr +structure followed by a data array. The data array contains the +ancillary data message, and the +.BR cmsghdr +structure contains descriptive information that allows an application +to correctly parse the data. +.P +The values for +.IR cmsg_level +shall be legal values for the +.IR level +argument to the +\fIgetsockopt\fR() +and +\fIsetsockopt\fR() +functions. The system documentation shall specify the +.IR cmsg_type +definitions for the supported protocols. +.P +Ancillary data is also possible at the socket level. The +.IR +header shall define the following symbolic constant for use as the +.IR cmsg_type +value when +.IR cmsg_level +is SOL_SOCKET: +.IP SCM_RIGHTS 14 +Indicates that the data array contains the access rights to be sent or +received. +.P +The +.IR +header shall define the following macros to gain access to the data +arrays in the ancillary data associated with a message header: +.IP "CMSG_DATA(\fIcmsg\fP)" 6 +.br +If the argument is a pointer to a +.BR cmsghdr +structure, this macro shall return an unsigned character pointer +to the data array associated with the +.BR cmsghdr +structure. +.IP "CMSG_NXTHDR(\fImhdr,cmsg\fP)" 6 +.br +If the first argument is a pointer to a +.BR msghdr +structure and the second argument is a pointer to a +.BR cmsghdr +structure in the ancillary data pointed to by the +.IR msg_control +field of that +.BR msghdr +structure, this macro shall return a pointer to the next +.BR cmsghdr +structure, or a null pointer if this structure is the last +.BR cmsghdr +in the ancillary data. +.IP "CMSG_FIRSTHDR(\fImhdr\fP)" 6 +.br +If the argument is a pointer to a +.BR msghdr +structure, this macro shall return a pointer to the first +.BR cmsghdr +structure in the ancillary data associated with this +.BR msghdr +structure, or a null pointer if there is no ancillary data associated +with the +.BR msghdr +structure. +.P +The +.IR +header shall define the +.BR linger +structure, which shall include at least the following members: +.sp +.RS 4 +.nf + +int l_onoff \fRIndicates whether linger option is enabled.\fR +int l_linger \fRLinger time, in seconds.\fR +.fi +.P +.RE +.P +The +.IR +header shall define the following symbolic constants with distinct values: +.IP SOCK_DGRAM 14 +Datagram socket. +.IP SOCK_RAW 14 +Raw Protocol Interface. +.IP SOCK_SEQPACKET 14 +Sequenced-packet socket. +.IP SOCK_STREAM 14 +Byte-stream socket. +.P +The +.IR +header shall define the following symbolic constant for use as the +.IR level +argument of +\fIsetsockopt\fR() +and +\fIgetsockopt\fR(). +.IP SOL_SOCKET 14 +Options to be accessed at socket level, not protocol level. +.P +The +.IR +header shall define the following symbolic constants with distinct values +for use as the +.IR option_name +argument in +\fIgetsockopt\fR() +or +\fIsetsockopt\fR() +calls (see the System Interfaces volume of POSIX.1\(hy2017, +.IR "Section 2.10.16" ", " "Use of Options"): +.IP SO_ACCEPTCONN 14 +Socket is accepting connections. +.IP SO_BROADCAST 14 +Transmission of broadcast messages is supported. +.IP SO_DEBUG 14 +Debugging information is being recorded. +.IP SO_DONTROUTE 14 +Bypass normal routing. +.IP SO_ERROR 14 +Socket error status. +.IP SO_KEEPALIVE 14 +Connections are kept alive with periodic messages. +.IP SO_LINGER 14 +Socket lingers on close. +.IP SO_OOBINLINE 14 +Out-of-band data is transmitted in line. +.IP SO_RCVBUF 14 +Receive buffer size. +.IP SO_RCVLOWAT 14 +Receive ``low water mark''. +.IP SO_RCVTIMEO 14 +Receive timeout. +.IP SO_REUSEADDR 14 +Reuse of local addresses is supported. +.IP SO_SNDBUF 14 +Send buffer size. +.IP SO_SNDLOWAT 14 +Send ``low water mark''. +.IP SO_SNDTIMEO 14 +Send timeout. +.IP SO_TYPE 14 +Socket type. +.P +The +.IR +header shall define the following symbolic constant for use as the maximum +.IR backlog +queue length which may be specified by the +.IR backlog +field of the +\fIlisten\fR() +function: +.IP SOMAXCONN 14 +The maximum +.IR backlog +queue length. +.P +The +.IR +header shall define the following symbolic constants with distinct values +for use as the valid values for the +.IR msg_flags +field in the +.BR msghdr +structure, or the +.IR flags +parameter in +\fIrecv\fR(), +\fIrecvfrom\fR(), +\fIrecvmsg\fR(), +\fIsend\fR(), +\fIsendmsg\fR(), +or +\fIsendto\fR() +calls: +.IP MSG_CTRUNC 14 +Control data truncated. +.IP MSG_DONTROUTE 14 +Send without using routing tables. +.IP MSG_EOR 14 +Terminates a record (if supported by the protocol). +.IP MSG_OOB 14 +Out-of-band data. +.IP MSG_NOSIGNAL 14 +No SIGPIPE generated when an attempt to send is made on a +stream-oriented socket that is no longer connected. +.IP MSG_PEEK 14 +Leave received data in queue. +.IP MSG_TRUNC 14 +Normal data truncated. +.IP MSG_WAITALL 14 +Attempt to fill the read buffer. +.P +The +.IR +header shall define the following symbolic constants with distinct values: +.IP AF_INET 14 +Internet domain sockets for use with IPv4 addresses. +.IP AF_INET6 14 +Internet domain sockets for use with IPv6 addresses. +.IP AF_UNIX 14 +UNIX domain sockets. +.IP AF_UNSPEC 14 +Unspecified. +.P +The value of AF_UNSPEC shall be 0. +.P +The +.IR +header shall define the following symbolic constants with distinct values: +.IP SHUT_RD 14 +Disables further receive operations. +.IP SHUT_RDWR 14 +Disables further send and receive operations. +.IP SHUT_WR 14 +Disables further send operations. +.P +The +.IR +header shall define the +.BR size_t +and +.BR ssize_t +types as described in +.IR . +.P +The following shall be declared as functions and may also be defined as +macros. Function prototypes shall be provided. +.sp +.RS 4 +.nf + +int accept(int, struct sockaddr *restrict, socklen_t *restrict); +int bind(int, const struct sockaddr *, socklen_t); +int connect(int, const struct sockaddr *, socklen_t); +int getpeername(int, struct sockaddr *restrict, socklen_t *restrict); +int getsockname(int, struct sockaddr *restrict, socklen_t *restrict); +int getsockopt(int, int, int, void *restrict, socklen_t *restrict); +int listen(int, int); +ssize_t recv(int, void *, size_t, int); +ssize_t recvfrom(int, void *restrict, size_t, int, + struct sockaddr *restrict, socklen_t *restrict); +ssize_t recvmsg(int, struct msghdr *, int); +ssize_t send(int, const void *, size_t, int); +ssize_t sendmsg(int, const struct msghdr *, int); +ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, + socklen_t); +int setsockopt(int, int, int, const void *, socklen_t); +int shutdown(int, int); +int sockatmark(int); +int socket(int, int, int); +int socketpair(int, int, int, int [2]); +.fi +.P +.RE +.P +Inclusion of +.IR +may also make visible all symbols from +.IR . +.LP +.IR "The following sections are informative." +.SH "APPLICATION USAGE" +To forestall portability problems, it is recommended that applications +not use values larger than 2\u\s-331\s+3\d \-1 for the +.BR socklen_t +type. +.P +The +.BR sockaddr_storage +structure solves the problem of declaring storage for automatic +variables which is both large enough and aligned enough for storing the +socket address data structure of any family. For example, code with a +file descriptor and without the context of the address family can pass +a pointer to a variable of this type, where a pointer to a socket +address structure is expected in calls such as +\fIgetpeername\fR(), +and determine the address family by accessing the received content +after the call. +.P +The example below illustrates a data structure which aligns on a 64-bit +boundary. An implementation-defined field +.IR _ss_align +following +.IR _ss_pad1 +is used to force a 64-bit alignment which covers proper alignment good +enough for needs of at least +.BR sockaddr_in6 +(IPv6) and +.BR sockaddr_in +(IPv4) address data structures. The size of padding field +.IR _ss_pad1 +depends on the chosen alignment boundary. The size of padding field +.IR _ss_pad2 +depends on the value of overall size chosen for the total size of the +structure. This size and alignment are represented in the above example +by implementation-defined (not required) constants _SS_MAXSIZE +(chosen value 128) and _SS_ALIGNMENT (with chosen value 8). Constants +_SS_PAD1SIZE (derived value 6) and _SS_PAD2SIZE (derived value 112) are +also for illustration and not required. The implementation-defined +definitions and structure field names above start with an + +to denote implementation private name space. Portable code is not expected +to access or reference those fields or constants. +.sp +.RS 4 +.nf + +/* + * Desired design of maximum size and alignment. + */ +#define _SS_MAXSIZE 128 + /* Implementation-defined maximum size. */ +#define _SS_ALIGNSIZE (sizeof(int64_t)) + /* Implementation-defined desired alignment. */ +.P +/* + * Definitions used for sockaddr_storage structure paddings design. + */ +#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(sa_family_t)) +#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof(sa_family_t)+ \e + _SS_PAD1SIZE + _SS_ALIGNSIZE)) +struct sockaddr_storage { + sa_family_t ss_family; /* Address family. */ +/* + * Following fields are implementation-defined. + */ + char _ss_pad1[_SS_PAD1SIZE]; + /* 6-byte pad; this is to make implementation-defined + pad up to alignment field that follows explicit in + the data structure. */ + int64_t _ss_align; /* Field to force desired structure + storage alignment. */ + char _ss_pad2[_SS_PAD2SIZE]; + /* 112-byte pad to achieve desired size, + _SS_MAXSIZE value minus size of ss_family + __ss_pad1, __ss_align fields is 112. */ +}; +.fi +.P +.RE +.SH "RATIONALE" +None. +.SH "FUTURE DIRECTIONS" +None. +.SH "SEE ALSO" +.IR "\fB\fP", +.IR "\fB\fP" +.P +The System Interfaces volume of POSIX.1\(hy2017, +.IR "\fIaccept\fR\^(\|)", +.IR "\fIbind\fR\^(\|)", +.IR "\fIconnect\fR\^(\|)", +.IR "\fIgetpeername\fR\^(\|)", +.IR "\fIgetsockname\fR\^(\|)", +.IR "\fIgetsockopt\fR\^(\|)", +.IR "\fIlisten\fR\^(\|)", +.IR "\fIrecv\fR\^(\|)", +.IR "\fIrecvfrom\fR\^(\|)", +.IR "\fIrecvmsg\fR\^(\|)", +.IR "\fIsend\fR\^(\|)", +.IR "\fIsendmsg\fR\^(\|)", +.IR "\fIsendto\fR\^(\|)", +.IR "\fIsetsockopt\fR\^(\|)", +.IR "\fIshutdown\fR\^(\|)", +.IR "\fIsockatmark\fR\^(\|)", +.IR "\fIsocket\fR\^(\|)", +.IR "\fIsocketpair\fR\^(\|)" +.\" +.SH COPYRIGHT +Portions of this text are reprinted and reproduced in electronic form +from IEEE Std 1003.1-2017, Standard for Information Technology +-- Portable Operating System Interface (POSIX), The Open Group Base +Specifications Issue 7, 2018 Edition, +Copyright (C) 2018 by the Institute of +Electrical and Electronics Engineers, Inc and The Open Group. +In the event of any discrepancy between this version and the original IEEE and +The Open Group Standard, the original IEEE and The Open Group Standard +is the referee document. The original Standard can be obtained online at +http://www.opengroup.org/unix/online.html . +.PP +Any typographical or formatting errors that appear +in this page are most likely +to have been introduced during the conversion of the source files to +man page format. To report such errors, see +https://www.kernel.org/doc/man-pages/reporting_bugs.html . -- cgit v1.2.3