summaryrefslogtreecommitdiffstats
path: root/man0p/sys_socket.h.0p
diff options
context:
space:
mode:
Diffstat (limited to 'man0p/sys_socket.h.0p')
-rw-r--r--man0p/sys_socket.h.0p446
1 files changed, 446 insertions, 0 deletions
diff --git a/man0p/sys_socket.h.0p b/man0p/sys_socket.h.0p
new file mode 100644
index 000000000..12cca0b6b
--- /dev/null
+++ b/man0p/sys_socket.h.0p
@@ -0,0 +1,446 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "<sys/socket.h>" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" <sys/socket.h>
+.SH NAME
+sys/socket.h \- main sockets header
+.SH SYNOPSIS
+.LP
+\fB#include <sys/socket.h>\fP
+.SH DESCRIPTION
+.LP
+The \fI<sys/socket.h>\fP header shall define the type \fBsocklen_t\fP,
+which is an integer type of width of at least 32
+bits; see APPLICATION USAGE.
+.LP
+The \fI<sys/socket.h>\fP header shall define the unsigned integer
+type \fBsa_family_t\fP.
+.LP
+The \fI<sys/socket.h>\fP header shall define the \fBsockaddr\fP structure
+that includes at least the following
+members:
+.sp
+.RS
+.nf
+
+\fBsa_family_t sa_family \fP Address family. \fB
+char sa_data[] \fP Socket address (variable-length data). \fB
+\fP
+.fi
+.RE
+.LP
+The \fBsockaddr\fP structure is used to define a socket address which
+is used in the \fIbind\fP(), \fIconnect\fP(), \fIgetpeername\fP(),
+\fIgetsockname\fP(),
+\fIrecvfrom\fP(), and \fIsendto\fP()
+functions.
+.LP
+The \fI<sys/socket.h>\fP header shall define the \fBsockaddr_storage\fP
+structure. This structure shall be:
+.IP " *" 3
+Large enough to accommodate all supported protocol-specific address
+structures
+.LP
+.IP " *" 3
+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
+.LP
+.LP
+The \fBsockaddr_storage\fP structure shall contain at least the following
+members:
+.sp
+.RS
+.nf
+
+\fBsa_family_t ss_family
+\fP
+.fi
+.RE
+.LP
+When a \fBsockaddr_storage\fP structure is cast as a \fBsockaddr\fP
+structure, the \fIss_family\fP field of the
+\fBsockaddr_storage\fP structure shall map onto the \fIsa_family\fP
+field of the \fBsockaddr\fP structure. When a
+\fBsockaddr_storage\fP structure is cast as a protocol-specific address
+structure, the \fIss_family\fP field shall map onto a
+field of that structure that is of type \fBsa_family_t\fP and that
+identifies the protocol's address family.
+.LP
+The \fI<sys/socket.h>\fP header shall define the \fBmsghdr\fP structure
+that includes at least the following
+members:
+.sp
+.RS
+.nf
+
+\fBvoid *msg_name \fP Optional address. \fB
+socklen_t msg_namelen \fP Size of address. \fB
+struct iovec *msg_iov \fP Scatter/gather array. \fB
+int msg_iovlen \fP Members in \fImsg_iov\fP. \fB
+void *msg_control \fP Ancillary data; see below. \fB
+socklen_t msg_controllen \fP Ancillary data buffer \fIlen\fP. \fB
+int msg_flags \fP Flags on received message. \fB
+\fP
+.fi
+.RE
+.LP
+The \fBmsghdr\fP structure is used to minimize the number of directly
+supplied parameters to the \fIrecvmsg\fP() and \fIsendmsg\fP() functions.
+This
+structure is used as a \fIvalue\fP- \fIresult\fP parameter in the
+\fIrecvmsg\fP()
+function and \fIvalue\fP only for the \fIsendmsg\fP() function.
+.LP
+The \fBiovec\fP structure shall be defined as described in \fI<sys/uio.h>\fP
+\&.
+.LP
+The \fI<sys/socket.h>\fP header shall define the \fBcmsghdr\fP structure
+that includes at least the following
+members:
+.sp
+.RS
+.nf
+
+\fBsocklen_t cmsg_len \fP Data byte count, including the \fBcmsghdr\fP. \fB
+int cmsg_level \fP Originating protocol. \fB
+int cmsg_type \fP Protocol-specific type. \fB
+\fP
+.fi
+.RE
+.LP
+The \fBcmsghdr\fP structure is used for storage of ancillary data
+object information.
+.LP
+Ancillary data consists of a sequence of pairs, each consisting of
+a \fBcmsghdr\fP structure followed by a data array. The data
+array contains the ancillary data message, and the \fBcmsghdr\fP structure
+contains descriptive information that allows an
+application to correctly parse the data.
+.LP
+The values for \fIcmsg_level\fP shall be legal values for the \fIlevel\fP
+argument to the \fIgetsockopt\fP() and \fIsetsockopt\fP()
+functions. The system documentation shall specify the \fIcmsg_type\fP
+definitions for the supported protocols.
+.LP
+Ancillary data is also possible at the socket level. The \fI<sys/socket.h>\fP
+header defines the following macro for use
+as the \fIcmsg_type\fP value when \fIcmsg_level\fP is SOL_SOCKET:
+.TP 7
+SCM_RIGHTS
+Indicates that the data array contains the access rights to be sent
+or received.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header defines the following macros to gain
+access to the data arrays in the ancillary data
+associated with a message header:
+.TP 7
+CMSG_DATA(\fIcmsg\fP)
+.sp
+If the argument is a pointer to a \fBcmsghdr\fP structure, this macro
+shall return an unsigned character pointer to the data array
+associated with the \fBcmsghdr\fP structure.
+.TP 7
+CMSG_NXTHDR(\fImhdr,cmsg\fP)
+.sp
+If the first argument is a pointer to a \fBmsghdr\fP structure and
+the second argument is a pointer to a \fBcmsghdr\fP structure
+in the ancillary data pointed to by the \fImsg_control\fP field of
+that \fBmsghdr\fP structure, this macro shall return a pointer
+to the next \fBcmsghdr\fP structure, or a null pointer if this structure
+is the last \fBcmsghdr\fP in the ancillary data.
+.TP 7
+CMSG_FIRSTHDR(\fImhdr\fP)
+.sp
+If the argument is a pointer to a \fBmsghdr\fP structure, this macro
+shall return a pointer to the first \fBcmsghdr\fP structure
+in the ancillary data associated with this \fBmsghdr\fP structure,
+or a null pointer if there is no ancillary data associated with
+the \fBmsghdr\fP structure.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header shall define the \fBlinger\fP structure
+that includes at least the following
+members:
+.sp
+.RS
+.nf
+
+\fBint l_onoff \fP Indicates whether linger option is enabled. \fB
+int l_linger \fP Linger time, in seconds. \fB
+\fP
+.fi
+.RE
+.LP
+The \fI<sys/socket.h>\fP header shall define the following macros,
+with distinct integer values:
+.TP 7
+SOCK_DGRAM
+Datagram socket.
+.TP 7
+SOCK_RAW
+Raw Protocol Interface.
+.TP 7
+SOCK_SEQPACKET
+Sequenced-packet socket.
+.TP 7
+SOCK_STREAM
+Byte-stream socket.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header shall define the following macro for
+use as the \fIlevel\fP argument of \fIsetsockopt\fP() and \fIgetsockopt\fP().
+.TP 7
+SOL_SOCKET
+Options to be accessed at socket level, not protocol level.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header shall define the following macros,
+with distinct integer values, for use as the
+\fIoption_name\fP argument in \fIgetsockopt\fP() or \fIsetsockopt\fP()
+calls:
+.TP 7
+SO_ACCEPTCONN
+Socket is accepting connections.
+.TP 7
+SO_BROADCAST
+Transmission of broadcast messages is supported.
+.TP 7
+SO_DEBUG
+Debugging information is being recorded.
+.TP 7
+SO_DONTROUTE
+Bypass normal routing.
+.TP 7
+SO_ERROR
+Socket error status.
+.TP 7
+SO_KEEPALIVE
+Connections are kept alive with periodic messages.
+.TP 7
+SO_LINGER
+Socket lingers on close.
+.TP 7
+SO_OOBINLINE
+Out-of-band data is transmitted in line.
+.TP 7
+SO_RCVBUF
+Receive buffer size.
+.TP 7
+SO_RCVLOWAT
+Receive ``low water mark''.
+.TP 7
+SO_RCVTIMEO
+Receive timeout.
+.TP 7
+SO_REUSEADDR
+Reuse of local addresses is supported.
+.TP 7
+SO_SNDBUF
+Send buffer size.
+.TP 7
+SO_SNDLOWAT
+Send ``low water mark''.
+.TP 7
+SO_SNDTIMEO
+Send timeout.
+.TP 7
+SO_TYPE
+Socket type.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header shall define the following macro as
+the maximum \fIbacklog\fP queue length which may be
+specified by the \fIbacklog\fP field of the \fIlisten\fP() function:
+.TP 7
+SOMAXCONN
+The maximum \fIbacklog\fP queue length.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header shall define the following macros,
+with distinct integer values, for use as the valid
+values for the \fImsg_flags\fP field in the \fBmsghdr\fP structure,
+or the \fIflags\fP parameter in \fIrecvfrom\fP(), \fIrecvmsg\fP(),
+\fIsendmsg\fP(), or \fIsendto\fP() calls:
+.TP 7
+MSG_CTRUNC
+Control data truncated.
+.TP 7
+MSG_DONTROUTE
+Send without using routing tables.
+.TP 7
+MSG_EOR
+Terminates a record (if supported by the protocol).
+.TP 7
+MSG_OOB
+Out-of-band data.
+.TP 7
+MSG_PEEK
+Leave received data in queue.
+.TP 7
+MSG_TRUNC
+Normal data truncated.
+.TP 7
+MSG_WAITALL
+Attempt to fill the read buffer.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header shall define the following macros,
+with distinct integer values:
+.TP 7
+AF_INET
+Internet domain sockets for use with IPv4 addresses.
+.TP 7
+AF_INET6
+Internet domain sockets for use with IPv6 addresses.
+.TP 7
+AF_UNIX
+UNIX domain sockets.
+.TP 7
+AF_UNSPEC
+Unspecified.
+.sp
+.LP
+The \fI<sys/socket.h>\fP header shall define the following macros,
+with distinct integer values:
+.TP 7
+SHUT_RD
+Disables further receive operations.
+.TP 7
+SHUT_RDWR
+Disables further send and receive operations.
+.TP 7
+SHUT_WR
+Disables further send operations.
+.sp
+.LP
+The following shall be declared as functions and may also be defined
+as macros. Function prototypes shall be provided.
+.sp
+.RS
+.nf
+
+\fBint 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 socket(int, int, int);
+int sockatmark(int);
+int socketpair(int, int, int, int[2]);
+\fP
+.fi
+.RE
+.LP
+Inclusion of \fI<sys/socket.h>\fP may also make visible all symbols
+from \fI<sys/uio.h>\fP.
+.LP
+\fIThe following sections are informative.\fP
+.SH APPLICATION USAGE
+.LP
+To forestall portability problems, it is recommended that applications
+not use values larger than 2**31
+-1 for the \fBsocklen_t\fP type.
+.LP
+The \fBsockaddr_storage\fP 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\fP(), and determine
+the
+address family by accessing the received content after the call.
+.LP
+The example below illustrates a data structure which aligns on a 64-bit
+boundary. An implementation-defined field
+\fI_ss_align\fP following \fI_ss_pad1\fP is used to force a 64-bit
+alignment which covers proper alignment good enough for needs
+of at least \fBsockaddr_in6\fP (IPv6) and \fBsockaddr_in\fP (IPv4)
+address data structures. The size of padding field
+\fI_ss_pad1\fP depends on the chosen alignment boundary. The size
+of padding field \fI_ss_pad2\fP 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 underscore to denote implementation private name
+space. Portable code is not expected to access or reference those
+fields or constants.
+.sp
+.RS
+.nf
+
+\fB/*
+ * 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. */
+.sp
+
+/*
+ * 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)+ \\
+ _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. */
+};
+\fP
+.fi
+.RE
+.SH RATIONALE
+.LP
+None.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fI<sys/uio.h>\fP , the System Interfaces volume of
+IEEE\ Std\ 1003.1-2001, \fIaccept\fP(), \fIbind\fP(), \fIconnect\fP(),
+\fIgetpeername\fP(), \fIgetsockname\fP(),
+\fIgetsockopt\fP(), \fIlisten\fP(), \fIrecv\fP(), \fIrecvfrom\fP(),
+\fIrecvmsg\fP(), \fIsend\fP(), \fIsendmsg\fP(), \fIsendto\fP(), \fIsetsockopt\fP(),
+\fIshutdown\fP(), \fIsocket\fP(), \fIsocketpair\fP()
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 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 .