16.8.1 Creating a Socket

The primitive for creating a socket is the socket function, declared in sys/socket.h.

Function: int socket (int namespace, int style, int protocol)

Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | See POSIX Safety Concepts.

This function creates a socket and specifies communication style style, which should be one of the socket styles listed in Communication Styles. The namespace argument specifies the namespace; it must be PF_LOCAL (see The Local Namespace) or PF_INET (see The Internet Namespace). protocol designates the specific protocol (see Socket Concepts); zero is usually right for protocol.

The return value from socket is the file descriptor for the new socket, or -1 in case of error. The following errno error conditions are defined for this function:

EAFNOSUPPORT

The namespace requested is not supported.

ESOCKTNOSUPPORT
EPROTONOSUPPORT
EPROTOTYPE

The style is not supported by the namespace specified.

EPROTONOSUPPORT

The protocol is not supported by the namespace specified.

EINVAL

The style or protocol requested is not valid.

EMFILE

The process already has too many file descriptors open.

ENFILE

The system already has too many file descriptors open.

EACCES
EPERM

The process does not have the privilege to create a socket of the specified style or protocol.

ENOBUFS
ENOMEM

Insufficient memory was available.

The file descriptor returned by the socket function supports both read and write operations. However, like pipes, sockets do not support file positioning operations.

For examples of how to call the socket function, see Example of Local-Namespace Sockets, or Internet Socket Example.