ioctl函数用于在套接字上控制套接字的I/O行为,同时获取与套接字挂起的I/O操作的有关信息。
1)第一个ioctl函数是ioctlsocket,其起源于Winsock 1规范,其定义如下:
int ioctlsocket(
SOCKET s,
long cmd,
u_long FAR* argp;
);
- s:为要进行I/O操作的套接字描述符。
- cmd:一个预定义的标志,用在将执行的I/O控制命令上。
- argp:为一个指针,指向一个密切相关的变量。每个命令的具体变量类型可能不一样。
2)在Winsock 2中增添的一个新的ioctl函数,该函数支持重叠I/O。该函数将argp分解为一系列输入参数和一系列输出参数。其定义如下:
int WSAIoctl(
SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOutBuffer,
DWORD cbOutBuffer,
LPWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
s:为要进行I/O操作的套接字描述符。
dwIoControlCode:一个预定义的标志,用在将执行的I/O控制命令上。
lpvInBuffer:一个指针,指向输入的值。
cbInBuffer:输入数据的多少,以字节为单位。
lpvOutBuffer:一个指针,指向输出缓冲区。
cbOutBuffer:输出缓冲区的大小,以字节为单位。
lpcbBytesReturned:对应实际返回的字节数。
lpOverlapped和lpCompletionRoutine:这两个参数为重叠I/O的参数。
3)在windows xp中新增加了一个ioctl函数WSANSPIoctl,这个函数用来对命名空间提供程序作出I/O控制调用。
标准I/O控制命令
1)FIONBIO
函数:ioctlsocket、WSAIocal
输入:unsigned int
输出:无
说明&