accept.3p (5450B)
- '\" et
- .TH ACCEPT "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
- .\"
- .SH PROLOG
- This manual page is part of the POSIX Programmer's Manual.
- The Linux implementation of this interface may differ (consult
- the corresponding Linux manual page for details of Linux behavior),
- or the interface may not be implemented on Linux.
- .\"
- .SH NAME
- accept
- \(em accept a new connection on a socket
- .SH SYNOPSIS
- .LP
- .nf
- #include <sys/socket.h>
- .P
- int accept(int \fIsocket\fP, struct sockaddr *restrict \fIaddress\fP,
- socklen_t *restrict \fIaddress_len\fP);
- .fi
- .SH DESCRIPTION
- The
- \fIaccept\fR()
- function shall extract the first connection on the queue of pending
- connections, create a new socket with the same socket type protocol
- and address family as the specified socket, and allocate a new file
- descriptor for that socket. The file descriptor shall be allocated
- as described in
- .IR "Section 2.14" ", " "File Descriptor Allocation".
- .P
- The
- \fIaccept\fR()
- function takes the following arguments:
- .IP "\fIsocket\fR" 12
- Specifies a socket that was created with
- \fIsocket\fR(),
- has been bound to an address with
- \fIbind\fR(),
- and has issued a successful call to
- \fIlisten\fR().
- .IP "\fIaddress\fR" 12
- Either a null pointer, or a pointer to a
- .BR sockaddr
- structure where the address of the connecting socket shall be returned.
- .IP "\fIaddress_len\fR" 12
- Either a null pointer, if
- .IR address
- is a null pointer, or a pointer to a
- .BR socklen_t
- object which on input specifies the length of the supplied
- .BR sockaddr
- structure, and on output specifies the length of the stored address.
- .P
- If
- .IR address
- is not a null pointer, the address of the peer for the accepted
- connection shall be stored in the
- .BR sockaddr
- structure pointed to by
- .IR address ,
- and the length of this address shall be stored in the object pointed to
- by
- .IR address_len .
- .P
- If the actual length of the address is greater than the length of the
- supplied
- .BR sockaddr
- structure, the stored address shall be truncated.
- .P
- If the protocol permits connections by unbound clients, and the peer is
- not bound, then the value stored in the object pointed to by
- .IR address
- is unspecified.
- .P
- If the listen queue is empty of connection requests and O_NONBLOCK is
- not set on the file descriptor for the socket,
- \fIaccept\fR()
- shall block until a connection is present. If the
- \fIlisten\fR()
- queue is empty of connection requests and O_NONBLOCK is set on the file
- descriptor for the socket,
- \fIaccept\fR()
- shall fail and set
- .IR errno
- to
- .BR [EAGAIN]
- or
- .BR [EWOULDBLOCK] .
- .P
- The accepted socket cannot itself accept more connections. The original
- socket remains open and can accept more connections.
- .SH "RETURN VALUE"
- Upon successful completion,
- \fIaccept\fR()
- shall return the non-negative file descriptor of the accepted socket.
- Otherwise, \-1 shall be returned,
- .IR errno
- shall be set to indicate the error, and any object pointed to by
- .IR address_len
- shall remain unchanged.
- .SH ERRORS
- The
- \fIaccept\fR()
- function shall fail if:
- .TP
- .BR EAGAIN " or " EWOULDBLOCK
- .br
- O_NONBLOCK is set for the socket file descriptor and no connections are
- present to be accepted.
- .TP
- .BR EBADF
- The
- .IR socket
- argument is not a valid file descriptor.
- .TP
- .BR ECONNABORTED
- .br
- A connection has been aborted.
- .TP
- .BR EINTR
- The
- \fIaccept\fR()
- function was interrupted by a signal that was caught before a valid
- connection arrived.
- .TP
- .BR EINVAL
- The
- .IR socket
- is not accepting connections.
- .TP
- .BR EMFILE
- All file descriptors available to the process are currently open.
- .TP
- .BR ENFILE
- The maximum number of file descriptors in the system are already open.
- .TP
- .BR ENOBUFS
- No buffer space is available.
- .TP
- .BR ENOMEM
- There was insufficient memory available to complete the operation.
- .TP
- .BR ENOTSOCK
- The
- .IR socket
- argument does not refer to a socket.
- .TP
- .BR EOPNOTSUPP
- The socket type of the specified socket does not support accepting
- connections.
- .P
- The
- \fIaccept\fR()
- function may fail if:
- .TP
- .BR EPROTO
- A protocol error has occurred;
- for example, the STREAMS protocol stack has not been initialized.
- .LP
- .IR "The following sections are informative."
- .SH EXAMPLES
- None.
- .SH "APPLICATION USAGE"
- When a connection is available,
- \fIselect\fR()
- indicates that the file descriptor for the socket is ready for reading.
- .SH RATIONALE
- None.
- .SH "FUTURE DIRECTIONS"
- None.
- .SH "SEE ALSO"
- .IR "Section 2.14" ", " "File Descriptor Allocation",
- .IR "\fIbind\fR\^(\|)",
- .IR "\fIconnect\fR\^(\|)",
- .IR "\fIlisten\fR\^(\|)",
- .IR "\fIsocket\fR\^(\|)"
- .P
- The Base Definitions volume of POSIX.1\(hy2017,
- .IR "\fB<sys_socket.h>\fP"
- .\"
- .SH COPYRIGHT
- Portions of this text are reprinted and reproduced in electronic form
- from IEEE Std 1003.1-2017, Standard for Information Technology
- -- Portable Operating System Interface (POSIX), The Open Group Base
- Specifications Issue 7, 2018 Edition,
- Copyright (C) 2018 by the Institute of
- Electrical and Electronics Engineers, Inc and The Open Group.
- In the event of any discrepancy between this version and the original IEEE and
- The Open Group Standard, the original IEEE and The Open Group Standard
- is the referee document. The original Standard can be obtained online at
- http://www.opengroup.org/unix/online.html .
- .PP
- Any typographical or formatting errors that appear
- in this page are most likely
- to have been introduced during the conversion of the source files to
- man page format. To report such errors, see
- https://www.kernel.org/doc/man-pages/reporting_bugs.html .