· | FIONBIO | 允许或禁止套接字的非成块模式。lpArgument参数指向一个DWORD类型的值,如果允许非成块方式,则非零,否则为零。如果套接字上设置了AsyncSelect,试图调用IOCtl把套接字设回成块方式都会出错,错误信息为WSAEINVAL。要想正确地设回成块方式,必须先以参数lEvent=0调用AsyncSelect禁止AsyncSelect,然后调用IOCtl。
|
· | FIONREAD | 检测一次Receive调用能从套接字中读出的最大字节数,结果就是lpArgument参数指向的一个DWORD类型的值。如果套接字的类型是SOCK_STREAM,FIONREAD返回一次Receive所能得到的数据总数,通常它和套接字队列中待取的数据大小一致。如果套接字的类型是SOCK_DGRAM,则FIONREAD返回套接字队列中的第一个数据报的大小。
|
· | SIOCATMARK | 检测是否所有的带外数据都已经被读出。这只适用于设置成在线接收所有带外数据(SO_OOBINLINE)的SOCK_STREAM类型的套接字。如果没有带外数据在等待读取,则返回一个非零值,否则为0,并且在该套接字上的下一次Receive或ReceiveFrom将取出在某个标记(mark)之前的部分或所有数据,应用需要使用SIOCATMARK操作来判断是否还有数据。如果在“紧急”(带外)数据之前还有普通数据,它们还会按照正确的次序被依次接收(一次Receive或ReceiveFrom调用是不会同时取得普通数据和带外数据的)。本函数的调用结果存放在lpArgument参数指向的DWORD类型值中。
|
本函数在功能上是Berkeley套接字ioctl()的子集。没有和FIOASYNC对应的选项,而且SIOCATMARK是在套接字级别上支持的唯一命令。