---
name: "socketpair"
section: "2"
platform: "macos"
package: "xnu"
version: "12377.121.6"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/socketpair"
---

# socketpair(2)

create a pair of connected sockets

## NAME

**socketpair** – create a pair of connected sockets

## SYNOPSIS

**#include \<sys/socket.h\>**

*int*\

**socketpair**(*int domain*, *int type*, *int protocol*, *int socket\_vector\[2\]*);

## DESCRIPTION

The **socketpair**() call creates an unnamed pair of connected sockets in the specified domain *domain*, of the specified *type*, and using the optionally specified *protocol*. The descriptors used in referencing the new sockets are returned in *socket\_vector*\[0\] and *socket\_vector*\[1\]. The two sockets are indistinguishable.

## RETURN VALUES

The **socketpair()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The call succeeds unless:

- \[EAFNOSUPPORT\]

  The specified address family is not supported on this machine.

- \[EFAULT\]

  The address *socket\_vector* does not specify a valid part of the process address space.

- \[EMFILE\]

  No more file descriptors are available for this process.

- \[ENFILE\]

  No more file descriptors are available for the system.

- \[ENOBUFS\]

  Insufficient resources were available in the system to perform the operation.

- \[ENOMEM\]

  Insufficient memory was available to fulfill the request.

- \[EOPNOTSUPP\]

  The specified protocol does not support creation of socket pairs.

- \[EPROTONOSUPPORT\]

  The specified protocol is not supported on this machine.

- \[EPROTOTYPE\]

  The socket type is not supported by the protocol.

- \[EACCES\]

  The process does not have appropriate privileges to create a socket of the  specified type and/or protocol.

## LEGACY SYNOPSIS

**#include \<sys/types.h\>** **#include \<sys/socket.h\>**

The include file ⟨sys/types.h⟩ is necessary.

## SEE ALSO

[socket(2)](/socket/2.md), [read(2)](/read/2.md), [write(2)](/write/2.md), [compat(5)](/compat/5.md)

## BUGS

This call is currently implemented only for the UNIX domain.

## HISTORY

The **socketpair**() function call appeared in 4.2BSD.
