socketpair - create a pair of connected sockets
/* See NOTES */
int socketpair(int domain, int type, int
protocol, int sv);
() call creates an unnamed pair of connected sockets in the
, of the specified type
, and using the
optionally specified protocol
. For further details of these arguments,
The file descriptors used in referencing the new sockets are returned in
 and sv
. The two sockets are indistinguishable.
On success, zero is returned. On error, -1 is returned, errno
appropriately, and sv
is left unchanged
On Linux (and other systems), socketpair
() does not modify sv
failure. A requirement standardizing this behavior was added in POSIX.1-2016.
- The specified address family is not supported on this machine.
- The address sv does not specify a valid part of the process address
- The per-process limit on the number of open file descriptors has been
- The system-wide limit on the total number of open files has been
- The specified protocol does not support creation of socket pairs.
- The specified protocol is not supported on this machine.
POSIX.1-2001, POSIX.1-2008, 4.4BSD. socketpair
() first appeared in
4.2BSD. It is generally portable to/from non-BSD systems supporting clones of
the BSD socket layer (including System V variants).
On Linux, the only supported domains for this call are AF_UNIX
) and AF_TIPC
(since Linux 4.12).
Since Linux 2.6.27, socketpair
() supports the SOCK_NONBLOCK
flags in the type
argument, as described in
POSIX.1 does not require the inclusion of <sys/types.h>
, and this
header file is not required on Linux. However, some historical (BSD)
implementations required this header file, and portable applications are
probably wise to include it.