ACCEPT(2) MachTen Programmer’s Manual ACCEPT(2)
NAME
accept - accept a connection on a socket
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int
accept(int s, struct sockaddr *addr, int *addrlen)
DESCRIPTION
The argument 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() argument extracts the first
connection request
on the queue of pending connections, creates a new socket
with the same
properties of s and allocates a new file descriptor for the
socket. 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() returns an error as
described below.
The accepted socket may not be used to accept more
connections. The
original socket s remains open.
The argument addr is a result
parameter that is filled in with the ad-
dress of the connecting entity, as known to the
communications layer.
The exact format of the addr parameter is determined by the
domain in
which the communication is occurring. The addrlen is a
value-result pa-
rameter; it should initially contain the amount of space
pointed to by
addr; on return it will contain the actual length (in bytes)
of the ad-
dress 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 con-
nection request and not implying confirmation. Confirmation
can be im-
plied by a normal read or write on the new file descriptor,
and rejection
can be implied by closing the new socket.
One can obtain user connection
request data without confirming the con-
nection by issuing a recvmsg(2) call with an msg_iovlen of 0
and a non-
zero msg_controllen, or by issuing a getsockopt(2) request.
Similarly,
one can provide user connection rejection information by
issuing a
sendmsg(2) call with providing only the control information,
or by call-
ing setsockopt(2).
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() will fail if:
[EBADF] The descriptor is invalid.
[ENOTSOCK] The descriptor references a file, not a socket.
[EOPNOTSUPP]
The referenced socket is not of type SOCK_STREAM.
[EFAULT] The addr parameter is
not in a writable part of the user ad-
dress space.
[EWOULDBLOCK]
The socket is marked non-blocking and no connections are
present to be accepted.
SEE ALSO
bind(2), connect(2), listen(2), select(2), socket(2)
HISTORY
The accept function appeared in 4.2BSD.
4.2 Berkeley Distribution December 11, 1993 2