116 lines
2.9 KiB
Groff
116 lines
2.9 KiB
Groff
'\"macro stdmacro
|
|
.\" Copyright (c) 1983 Regents of the University of California.
|
|
.\" All rights reserved. The Berkeley software License Agreement
|
|
.\" specifies the terms and conditions for redistribution.
|
|
.\"
|
|
.\" @(#)accept.2 6.3 (Berkeley) 5/22/86
|
|
.\"
|
|
.if n .pH man2.accept @(#)accept 30.3 of 2/1/86
|
|
.TH ACCEPT 2
|
|
.UC 5
|
|
.SH NAME
|
|
accept \- accept a connection on a socket
|
|
.SH SYNOPSIS
|
|
.B #include <sys/types.h>
|
|
.br
|
|
.B #include <sys/socket.h>
|
|
.sp
|
|
.B "int accept (int s, struct sockaddr *addr, int *addrlen);"
|
|
.SH DESCRIPTION
|
|
The argument
|
|
.I s
|
|
is a socket that has been created with
|
|
.IR socket (2),
|
|
bound to an address with
|
|
.IR bind (2),
|
|
and is listening for connections after a
|
|
.IR listen (2).
|
|
.I Accept
|
|
extracts the first connection
|
|
on the queue of pending connections, creates
|
|
a new socket with the same properties of
|
|
.I 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,
|
|
.I 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,
|
|
.I accept
|
|
returns an error as described below.
|
|
The accepted socket
|
|
may not be used
|
|
to accept more connections. The original socket
|
|
.I s
|
|
remains open.
|
|
.PP
|
|
If
|
|
.I addr
|
|
is non-zero, it is a result parameter that is filled in with
|
|
the address of the connecting entity,
|
|
as known to the communications layer.
|
|
The exact format of the
|
|
.I addr
|
|
parameter is determined by the domain in which the communication
|
|
is occurring.
|
|
The
|
|
.I addrlen
|
|
is a value-result parameter. It should initially contain the
|
|
amount of space pointed to by
|
|
.IR addr ;
|
|
on return it will contain the actual length (in bytes) of the
|
|
address returned.
|
|
If
|
|
.I addr
|
|
is zero,
|
|
.I addrlen
|
|
is ignored.
|
|
.PP
|
|
This call
|
|
is used with connection-based socket types, currently with SOCK_STREAM.
|
|
.PP
|
|
It is possible to
|
|
.IR select (2)
|
|
a socket for the purposes of doing an
|
|
.I accept
|
|
by selecting it for read.
|
|
.SH "RETURN VALUE
|
|
The call returns \-1 on error. If it succeeds, it returns a non-negative
|
|
integer that is a descriptor for the accepted socket.
|
|
.SH ERRORS
|
|
The \f2accept\fP will fail if:
|
|
.TP 20
|
|
[EBADF]
|
|
The descriptor is invalid.
|
|
.TP 20
|
|
[ENOTSOCK]
|
|
The descriptor references a file, not a socket.
|
|
.TP 20
|
|
[EOPNOTSUPP]
|
|
The referenced socket is not of type SOCK_STREAM.
|
|
.TP 20
|
|
[EFAULT]
|
|
The \f2addr\fP or \f2addrlen\fP parameter is not in a writable part
|
|
of the user address space.
|
|
.TP 20
|
|
[EWOULDBLOCK]
|
|
The socket is marked non-blocking and no connections
|
|
are present to be accepted.
|
|
.TP 20
|
|
[EMFILE]
|
|
The per-process descriptor table is full.
|
|
.TP 20
|
|
[ENFILE]
|
|
The system file table is full.
|
|
.SH SEE ALSO
|
|
bind(2), connect(2), listen(2), select(2), socket(2)
|
|
.SH NOTES
|
|
ABI-compliant versions of the above call can be obtained from
|
|
.IR libsocket.so .
|
|
.PP
|
|
When used with a socket of type AF_UNIX, this call does not return a valid
|
|
remote address, unless the remote end was explicitly bound to a pathname.
|
|
'\".so /pubs/tools/origin.bsd
|