Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Reference > A

accept(2)

HP-UX 11i Version 3: February 2007
» 

Technical documentation

» Feedback
Content starts here

 » Table of Contents

 » Index

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 connect(). 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 format 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 structure 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 entity's 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 connection request arrived. Call-acceptance can be controlled with the ioctl() X25_CALL_ACPT_APPROVAL request.

X/Open Sockets Compilation Environment

See xopen_networking(7).

RETURN VALUE

Upon successful completion, accept() returns a nonnegative integer which is a descriptor for the accepted socket.

If an error occurs, accept() returns -1 and sets errno to indicate the cause.

ERRORS

If accept() fails, errno is set to one of the following values:

EAGAIN

Nonblocking I/O is enabled using O_NONBLOCK and no connections are present to be accepted.

EBADF

The argument, s, is not a valid file descriptor.

ECONNABORTED

The socket is being shutdown due to a request by software. This is usually caused by a shutdown() system call.

EFAULT

The addr parameter is not a valid pointer.

EINTR

The call was interrupted by a signal before a valid connection arrived.

EINVAL

The socket referenced by s is not currently a listen socket or has been shut down with shutdown(). A listen() must be done before an accept() is allowed.

EMFILE

The maximum number of file descriptors for this process are currently open.

ENFILE

The system's table of open files is full and no more accept() calls can be processed at this time.

ENOBUFS

No buffer space is available. The accept() cannot complete. The queued socket connect request is aborted.

ENOMEM

No memory is available. The accept() cannot complete. The queued socket connect request is aborted.

ENOTSOCK

The argument, s, is a valid file descriptor, but it is not a socket.

EOPNOTSUPP

The socket referenced by s does not support accept().

EWOULDBLOCK

Nonblocking I/O is enabled using O_NDELAY or FIOSNBIO and no connections are present to be accepted.

OBSOLESCENCE

Currently, the socklen_t and size_t types are the same size. This is compatible with the UNIX 95 and UNIX 03 profiles. However, in a future release, socklen_t might be a different size. In that case, passing a size_t pointer will evoke compile-time warnings, which must be corrected in order for the application to behave correctly. Applications that use socklen_t now, where appropriate, will avoid such migration problems. On the other hand, applications that need to be portable to the UNIX 95 profile should follow the X/Open specification (see xopen_networking(7)).

WARNINGS

Linking binary objects compiled to X/Open Sockets specification and binary objects compiled to HP-UX BSD Sockets specification to the same executable may result in unexpected behavior, including application abnormal termination and unexpected socket errors. See xopen_networking(7) for details and remedy.

FUTURE DIRECTION

Currently, the default behavior is the HP-UX BSD Sockets; however, it might be changed to X/Open Sockets in a future release. At that time, any HP-UX BSD Sockets behavior that is incompatible with X/Open Sockets might be obsoleted. Applications that conform to the X/Open specification now will avoid migration problems (see xopen_networking(7)).

AUTHOR

accept() was developed by HP and the University of California, Berkeley.

STANDARDS CONFORMANCE

accept(): XPG4, UNIX 95, UNIX 03

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 1983-2007 Hewlett-Packard Development Company, L.P.