HP-UX Reference (11i v3 07/02) - 2 System Calls (vol 5)

a
accept(2) accept(2)
NAME
accept() - accept a connection on a socket
SYNOPSIS
#include <sys/socket.h>
AF_CCITT only
#include <x25/x25addrstr.h>
int accept(int s, void *addr, int *addrlen);
UNIX 03 only (X/Open Sockets)
int accept(
int s,
struct sockaddr *__restrict addr,
socklen_t *__restrict addrlen
);
Obsolescent UNIX 95 only (X/Open Sockets)
int accept(int s, struct sockaddr *addr, size_t *addrlen);
DESCRIPTION
The accept() system call is used with connection-based socket types, such as
SOCK_STREAM . The
argument, s, is a socket descriptor created with
socket(), bound to a local address by
bind(), and
listening for connections after a
listen(). accept() extracts the first connection on the queue of
pending connections, creates a new socket with the same properties as s, and returns a new file descriptor,
ns, for the socket.
If no pending connections are present on the queue and nonblocking mode has not been enabled with the
fcntl() O_NONBLOCK or O_NDELAY flags or the ioctl() FIOSNBIO request, accept() blocks
the caller until a connection is present. O_NONBLOCK and O_NDELAY are defined in <sys/fcntl.h>
(see fcntl(2), fcntl(5), and socket(7)). FIOSNBIO and the equivalent request FIONBIO are defined in
<sys/ioctl.h>, although use of
FIONBIO is not recommended (see ioctl(2), ioctl(5), and socket(7)).
If the socket has nonblocking mode enabled and no pending connections are present on the queue,
accept() returns an error as described below. The accepted socket, ns, cannot be used to accept more
connections. The original socket s remains open for incoming connection requests. To determine whether a
listening socket has pending connection requests ready for an accept() call, use select() for reading.
The argument addr should point to a socket address structure. The accept() call fills in this structure
with the address of the connecting entity, as known to the underlying protocol. In the case of AF_UNIX
sockets, the peer’s address is filled in only if the peer had done an explicit
bind() before doing a con-
nect()
. Therefore, for AF_UNIX sockets, in the common case, when the peer had not done an explicit
bind() before doing a connect() , the structure is filled with a string of nulls for the address. The for-
mat of the address depends upon the protocol and the address-family of the socket s.
The argument addrlen is a pointer to a variable. Initially, the variable should contain the size of the struc-
ture pointed to by addr. On return, it contains the actual length (in bytes) of the address returned. If the
memory pointed to by addr is not large enough to contain the entire address, only the first addrlen bytes of
the address are returned. If addr is NULL or addrlen contains 0, the connecting entitys address will not
be returned.
The
fcntl() O_NONBLOCK and O_NDELAY flags and ioctl() FIOSNBIO request are all supported.
These features interact as follows:
If the O_NONBLOCK or O_NDELAY flag has been set, accept() requests behave accordingly,
regardless of any FIOSNBIO requests.
If neither the O_NONBLOCK flag nor the O_NDELAY flag has been set, FIOSNBIO requests control
the behavior of accept().
AF_CCITT only
The addr parameter to accept() returns addressing information for the connecting entity, except for the
x25ifname[] field of addr which contains the name of the local X.25 interface through which the connec-
tion request arrived. Call-acceptance can be controlled with the ioctl()
X25_CALL_ACPT_APPROVAL
request.
28 Hewlett-Packard Company 1 HP-UX 11i Version 3: February 2007