create an endpoint for communication
() creates an endpoint for
communication and returns a descriptor.
parameter specifies a communications
domain within which communication will take place; this selects the protocol
family which should be used. These families are defined in the include file
The currently understood formats are:
- UNIX internal protocols
- ARPA Internet protocols
- IPv6 (Internet Protocol version 6) protocols
The socket has the indicated type
specifies the semantics of communication. Currently defined types are:
type provides sequenced,
reliable, two-way connection based byte streams. An out-of-band data
transmission mechanism may be supported. A
socket supports datagrams
(connectionless, unreliable messages of a fixed (typically small) maximum
provide a sequenced, reliable, two-way connection-based data transmission path
for datagrams of fixed maximum length; a consumer may be required to read an
entire packet with each read system call. This facility is protocol specific,
and presently implemented only for
sockets provide access to internal
network protocols and interfaces, and are available only to the superuser.
Any combination of the following flags may additionally be used in the
- Set close-on-exec flag on the new descriptor.
- Set non-blocking I/O mode on the new socket.
- For domains
AF_INET6, only allow
sendmsg(2) to the DNS port
specifies a particular protocol to
be used with the socket. Normally only a single protocol exists to support a
particular socket type within a given protocol family. However, it is possible
that many protocols may exist, in which case a particular protocol must be
specified in this manner. The protocol number to use is particular to the
“communication domain” in which communication is to take place;
. A value of
0 for protocol
will let the system select an
appropriate protocol for the requested socket type.
Sockets of type
byte streams. A stream socket must be in a
state before any data may be sent or
received on it. A connection to another socket is created with a
connected, data may be transferred using
calls or some variant of
calls. When a session has
been completed a close(2)
performed. Out-of-band data may also be transmitted as described in
and received as described
The communications protocols used to implement a
ensure that data is not lost or
duplicated. If a piece of data for which the peer protocol has buffer space
cannot be successfully transmitted within a reasonable length of time, then
the connection is considered broken and calls will indicate an error with -1
returns and with
as the specific
code in the global variable errno
protocols optionally keep sockets “warm” by forcing
transmissions roughly every minute in the absence of other activity. An error
is then indicated if no response can be elicited on an otherwise idle
connection for an extended period (e.g., 5 minutes). A
signal is raised if a process sends
on a broken stream; this causes naive processes, which do not handle the
signal, to exit.
sockets employ the same system
sockets. The only
difference is that read(2)
will return only the amount of data requested, and any remaining in the
arriving packet will be discarded.
sockets allow sending of datagrams
to correspondents named in send(2)
calls. Datagrams are generally received with
, which returns the
next datagram with its return address.
call can be used to
specify a process group to receive a
signal when the out-of-band data arrives. It may also enable non-blocking I/O
and asynchronous notification of I/O events via
The operation of sockets is controlled by socket level
. These options are defined in the file
are used to
set and get options, respectively.
A -1 is returned if an error occurs, otherwise the return value is a descriptor
referencing the socket.
() call fails if:
- The specified address family is not supported on this machine.
- The protocol type or the specified protocol is not supported within this
- The combination of the specified protocol and type is not supported.
- The per-process descriptor table is full.
- The system file table is full.
- Insufficient resources were available in the system to perform the
- Permission to create a socket of the specified type and/or protocol is
An Introductory 4.3 BSD
Interprocess Communication Tutorial, reprinted in
UNIX Programmer's Supplementary Documents Volume 1.
BSD Interprocess Communication
Tutorial, reprinted in UNIX Programmer's
Supplementary Documents Volume 1.
() function conforms to
IEEE Std 1003.1-2008
flags are expected to conform
to a future revision of that standard.
flag is an
() system call first appeared in
. Support for the
flags appeared in
. Support for the
flag appeared in