Control the mode of a socket.
s
A descriptor identifying a socket.
cmd
The command to perform on the socket s.
argp
A pointer to
a parameter for cmd.
Remarks
This routine may be used on any socket in any state. It is used to get
or retrieve operating parameters associated with the socket, independent
of the protocol and communications subsystem. The following commands are
supported:
FIONBIO
Enable or disable non-blocking mode
on the socket s. argp points at an unsigned long,
which is non-zero if non-blocking mode is to be enabled and zero if it is
to be disabled. When a socket is created, it operates in blocking mode
(i.e. non-blocking mode is disabled). This is consistent with BSD sockets.
The WSAAsyncSelect() routine automatically
sets a socket to nonblocking mode. If WSAAsyncSelect() has been
issued on a socket, then any attempt to use ioctlsocket() to set
the socket back to blocking mode will fail with WSAEINVAL. To set the socket
back to blocking mode, an application must first disable WSAAsyncSelect()
by calling WSAAsyncSelect() with the lEvent parameter
equal to 0.
FIONREAD
Determine
the amount of data which can be read atomically from socket s. argp
points at an unsigned long in which ioctlsocket() stores
the result. If s is of type SOCK_STREAM, FIONREAD returns the total
amount of data which may be read in a single recv(); this is normally
the same as the total amount of data queued on the socket. If s is
of type SOCK_DGRAM, FIONREAD returns the size of the first datagram queued
on the socket.
SIOCATMARK
Determine
whether or not all out-of-band data has been read. This applies only to
a socket of type SOCK_STREAM which has been configured for in-line reception
of any out-of-band data (SO_OOBINLINE). If no out-of-band data is waiting
to be read, the operation returns TRUE. Otherwise it returns FALSE, and
the next recv() or recvfrom()
performed on the socket will retrieve some or all of the data preceding
the "mark"; the application should use the SIOCATMARK operation to determine
whether any remains. If there is any normal data preceding the "urgent"
(out of band) data, it will be received in order. (Note that a recv()
or recvfrom() will never mix out-of-band
and normal data in the same call.) argp points at a BOOL in
which ioctlsocket() stores the result.
Compatibility This function is a subset of ioctl() as used in Berkeley
sockets. In particular, there is no command which is equivalent to FIOASYNC,
while SIOCATMARK is the only socket-level command which is supported.
Return Value
Upon successful completion, the ioctlsocket() returns 0. Otherwise,
a value of SOCKET_ERROR is returned, and a specific error code may be retrieved
by calling WSAGetLastError()
Error Codes
WSANOTINITIALISED
WSAENETDOWN
The Windows Sockets implementation has detected
that the network subsystem has failed.
WSAEINVAL
cmd is not a valid command, or argp is
not an acceptable parameter for cmd, or the command is not applicable
to the type of socket supplied
WSAEINPROGRESS
A
blocking Windows Sockets operation is in progress.
WSAENOTSOCK
The descriptor s is not a socket.
See Also
socket(), setsockopt(),
getsockopt(), WSAAsyncSelect()
[Back: inet_ntoa()]
[Next: listen()]