accept (8) ( Linux man: Команды системного администрирования )
- accept a connection on a socket
#include <sys/socket.h> int
accept (int s struct sockaddr * restrict addr socklen_t * restrict addrlen);
is a socket that has been created with
bound to an address with
and is listening for connections after a
system call extracts the first connection request on the
queue of pending connections, creates a new socket,
and allocates a new file descriptor for the socket which
inherits the state of the
property from the original socket
Fa s .
If no pending connections are
present on the queue, and the original socket
is not marked as non-blocking,
blocks the caller until a connection is present.
If the original socket
is marked non-blocking and no pending
connections are present on the queue,
returns an error as described below.
The accepted socket
may not be used
to accept more connections.
The original socket
is a result argument that is filled-in with
the address of the connecting entity,
as known to the communications layer.
The exact format of the
argument is determined by the domain in which the communication
A null pointer may be specified for
if the address information is not desired;
in this case,
is not used and should also be null.
is a value-result argument; it should initially contain the
amount of space pointed to by
Fa addr ;
on return it will contain the actual length (in bytes) of the
is used with connection-based socket types, currently with
It is possible to
a socket for the purposes of doing an
by selecting it for read.
For certain protocols which require an explicit confirmation,
can be thought of
as merely dequeueing the next connection
request and not implying confirmation.
Confirmation can be implied by a normal read or write on the new
file descriptor, and rejection can be implied by closing the
For some applications, performance may be enhanced by using an
to pre-process incoming connections.
The call returns -1 on error.
If it succeeds, it returns a non-negative
integer that is a descriptor for the accepted socket.
system call will fail if:
Bq Er EBADF
The descriptor is invalid.
Bq Er EINTR
operation was interrupted.
Bq Er EMFILE
The per-process descriptor table is full.
Bq Er ENFILE
The system file table is full.
Bq Er ENOTSOCK
The descriptor references a file, not a socket.
Bq Er EINVAL
has not been called on the socket descriptor.
Bq Er EINVAL
argument is negative.
Bq Er EFAULT
argument is not in a writable part of the
user address space.
Bq Er EWOULDBLOCK
The socket is marked non-blocking and no connections
are present to be accepted.
Bq Er ECONNABORTED
A connection arrived, but it was closed while waiting
on the listen queue.