— create an endpoint for
, int type
() creates an endpoint for communication and returns a
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
, which 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
socket may 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.
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
are full-duplex byte
streams. A stream socket must be in a connected
any data may be sent or received on it. A connection to another socket is
created with a
Once connected, data may be transferred using
calls or some
variant of the send(2)
a session has been completed a
performed. Out-of-band data may also be transmitted as described in
and received as
described in recv(2)
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
. The 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
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 calls as
sockets. The only difference is that
return only the amount of data requested, and any remaining in the arriving
packet will be discarded.
allow sending of datagrams to correspondents named in
Datagrams are generally received with
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
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
- The protocol type or the specified protocol is not
supported within this domain.
- The combination of the specified protocol and type is not
- The per-process descriptor table is full.
- The system file table is full.
- Insufficient resources were available in the system to
perform the operation.
- Permission to create a socket of the specified type and/or
protocol is denied.
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
() system call first appeared in