Originally Posted by
man 2 accept
ACCEPT(2) Linux Programmer's Manual ACCEPT(2)
NAME
accept - accept a connection on a socket
SYNOPSIS
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
#define _GNU_SOURCE
#include <sys/socket.h>
int accept4(int sockfd, struct sockaddr *addr,
socklen_t *addrlen, int flags);
DESCRIPTION
The accept() system call is used with connection-based socket types (SOCK_STREAM, SOCK_SEQPACKET). 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 unaf-
fected 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 determined 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 non-blocking, accept() blocks the caller until a
connection is present. If the socket is marked non-blocking and no pending connections are present on the queue, accept() fails
with the error EAGAIN.
In order to be notified of incoming connections on a socket, you can use select(2) or poll(2). A readable event will be delivered
when a new connection is attempted and you may then call accept() to get a socket for that connection. Alternatively, you can set
the socket to deliver SIGIO when activity occurs on a socket; see socket(7) for details.
For certain protocols which require an explicit confirmation, such as DECNet, accept() can be thought of as merely dequeuing the
next connection request and not implying confirmation. Confirmation can be implied by a normal read or write on the new file