accept (8) ( Linux man: Команды системного администрирования )
BSD mandoc
NAME
accept
- accept a connection on a socket
LIBRARY
Lb libc
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h> int
accept (int s struct sockaddr * restrict addr socklen_t * restrict addrlen);
DESCRIPTION
The argument
Fa s
is a socket that has been created with
socket(2),
bound to an address with
bind(2),
and is listening for connections after a
listen(2).
The
accept ();
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
O_NONBLOCK
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,
accept ();
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,
accept ();
returns an error as described below.
The accepted socket
may not be used
to accept more connections.
The original socket
Fa s
remains open.
The argument
Fa addr
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
Fa addr
argument is determined by the domain in which the communication
is occurring.
A null pointer may be specified for
Fa addr
if the address information is not desired;
in this case,
Fa addrlen
is not used and should also be null.
Otherwise, the
Fa addrlen
argument
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
address returned.
This call
is used with connection-based socket types, currently with
SOCK_STREAM
It is possible to
select(2)
a socket for the purposes of doing an
accept ();
by selecting it for read.
For certain protocols which require an explicit confirmation,
such as
ISO
or
DATAKIT
accept ();
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
new socket.
For some applications, performance may be enhanced by using an
accept_filter9
to pre-process incoming connections.
RETURN VALUES
The call returns -1 on error.
If it succeeds, it returns a non-negative
integer that is a descriptor for the accepted socket.
ERRORS
The
accept ();
system call will fail if:
Bq Er EBADF
The descriptor is invalid.
Bq Er EINTR
The
accept ();
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
listen(2)
has not been called on the socket descriptor.
Bq Er EINVAL
The
Fa addrlen
argument is negative.
Bq Er EFAULT
The
Fa addr
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.