accept
The Windows
Sockets accept function accepts a connection on a socket.
SOCKET accept (
SOCKET s, |
|
struct
sockaddr FAR* addr, |
|
int FAR* addrlen |
|
); |
|
Parameters
s
[in] A
descriptor identifying a socket which is listening for connections after a listen.
addr
[out] An
optional pointer to a buffer which receives the address of the connecting
entity, as known to the communications layer. The exact format of the addr
argument is determined by the address family established when the socket was
created.
addrlen
[out] An
optional pointer to an integer which contains the length of the address addr.
Remarks
This routine
extracts the first connection on the queue of pending connections on s,
creates a new socket and returns a handle to the new socket. The newly created
socket has the same properties as s including asynchronous events
registered with WSAAsyncSelect or with WSAEventSelect, but not
including the listening socket s group ID, if
any. If no pending connections are present on the queue, and the socket is not
marked as nonblocking, accept blocks the caller until a connection is
present. If the socket is marked nonblocking and no pending connections are
present on the queue, accept returns an error as described below. The
accepted socket cannot be used to accept more connections. The original socket
remains open.
The argument addr
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 addr
parameter is determined by the address family in which the communication is
occurring. The addrlen is a value-result parameter; it should initially
contain the amount of space pointed to by addr; on return it will
contain the actual length (in bytes) of the address returned. This call is used
with connection-oriented socket types such as SOCK_STREAM. If addr
and/or addrlen are equal to NULL, then no information about the remote
address of the accepted socket is returned.
Return Values
If no error
occurs, accept returns a value of type SOCKET which is a descriptor for
the accepted socket. Otherwise, a value of INVALID_SOCKET is returned, and a
specific error code can be retrieved by calling WSAGetLastError.
The integer
referred to by addrlen initially contains the amount of space pointed to
by addr. On return it will contain the actual length in bytes of the
address returned.
Error Codes
WSANOTINITIALISED |
A
successful WSAStartup must occur before using this FUNCTION. |
WSAENETDOWN |
The network
subsystem has failed. |
WSAEFAULT |
The addrlen
argument is too small or addr is not a valid part of the user
address space. |
WSAEINTR |
The
(blocking) call was canceled through WSACancelBlockingCall. |
WSAEINPROGRESS |
A blocking
Windows Sockets 1.1 call is in progress, or the service provider is still
processing a callback function. |
WSAEINVAL |
listen was not invoked prior to accept. |
WSAEMFILE |
The queue
is nonempty upon entry to accept and there are no descriptors available. |
WSAENOBUFS |
No buffer
space is available. |
WSAENOTSOCK |
The
descriptor is not a socket. |
WSAEOPNOTSUPP |
The
referenced socket is not a type that supports connection-oriented service. |
WSAEWOULDBLOCK |
The socket
is marked as nonblocking and no connections are present to be accepted. |
See Also