Linux Programmer’s Manual
accept − accept a connection on a socket
/* See NOTES */
int accept(int sockfd , struct sockaddr *addr, socklen_t *addrlen);
int accept4(int sockfd , struct sockaddr *addr,
socklen_t *addrlen, int flags);
The accept() system call is used with connection-based socket types (SOCK_STREAM, SOCK_SEQ-
PA CKET). It extracts the first connection request on the queue of pending connections for the listening
socket, sockfd , creates a new connected socket, and returns a new file descriptor referring to that socket.
The newly created socket is not in the listening state. The original socket sockfd is unaffected by this call.
The argument sockfd is a socket that has been created with socket(2), bound to a local address with
bind(2), and is listening for connections after a listen(2).
The argument addr is a pointer to a sockaddr structure. This structure is filled in with the address of the
peer socket, as known to the communications layer. The exact format of the address returned addr is deter-
mined by the socket’s address family (see socket(2) and the respective protocol man pages). When addr is
NULL, nothing is filled in; in this case, addrlen is not used, and should also be NULL.
The addrlen argument is a value-result argument: the caller must initialize it to contain the size (in bytes) of
the structure pointed to by addr; on return it will contain the actual size of the peer address.
The returned address is truncated if the buffer provided is too small; in this case, addrlen will return a value
greater than was supplied to the call.
If no pending connections are present on the queue, and the socket is not marked as nonblocking, accept()
blocks the caller until a connection is present. If the socket is marked nonblocking and no pending connec-
tions are present on the queue, accept() fails with the error EAGAIN or EWOULDBLOCK.
In order to be notified of inco