ioctlsocket
The Windows
Sockets ioctlsocket function controls the mode of a socket.
int ioctlsocket (
SOCKET s, |
|
long cmd, |
|
u_long
FAR* argp |
|
); |
|
Parameters
s
[in] A
descriptor identifying a socket.
cmd
[in] The
command to perform on the socket s.
argp
[in/out] A
pointer to a parameter for cmd.
Remarks
This routine
can 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. Here are the supported commands and their semantics:
FIONBIO
Enable or
disable nonblocking mode on socket s. argp points at an unsigned
long, which is nonzero if nonblocking mode is to be enabled and zero if it
is to be disabled. When a socket is created, it operates in blocking mode (that
is, nonblocking mode is disabled). This is consistent with BSD sockets.
The WSAAsyncSelect
or WSAEventSelect routine automatically sets a socket to nonblocking
mode. If WSAAsyncSelect or WSAEventSelect 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 zero, or disable WSAEventSelect
by calling WSAEventSelect with the lNetworkEvents parameter equal
to zero.
FIONREAD
Determine the
amount of data which can be read atomically from socket s. argp
points to an unsigned long in which ioctlsocket stores the result.
If s is stream oriented (for example, type SOCK_STREAM), FIONREAD
returns an amount of data which can be read in a single recv; this may
or may not be the same as the total amount of data queued on the socket. If s
is message oriented (for example, type SOCK_DGRAM), FIONREAD returns the size
of the first datagram (message) queued on the socket.
SIOCATMARK
Determine
whether or not all out-of-band data has been read. (See section Windows
Sockets 1.1 Blocking Routines & EINPROGRESS
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 Values
Upon
successful completion, the ioctlsocket returns zero. Otherwise, a value
of SOCKET_ERROR is returned, and a specific error code can be retrieved by
calling WSAGetLastError.
Error Codes
WSANOTINITIALISED |
A
successful WSAStartup must occur before using this function. |
WSAENETDOWN |
The network
subsystem has failed. |
WSAEINPROGRESS |
A blocking
Windows Sockets 1.1 call is in progress, or the service provider is still
processing a callback function. |
WSAENOTSOCK |
The
descriptor s is not a socket. |
WSAEFAULT |
The argp
argument is not a valid part of the user address space. |
See Also