为什么SIO_RCVALL=0x98000001 ?是有根据的。
在winsock2.h中定义了以下宏:
#define IOC_VOID 0x20000000 /* no parameters */
#define IOC_OUT 0x40000000 /* copy out parameters */
#define IOC_IN 0x80000000 /* copy in parameters */
#define IOC_UNIX 0x00000000
#define IOC_WS2 0x08000000
#define IOC_PROTOCOL 0x10000000
#define IOC_VENDOR 0x18000000
#define _WSAIO(x,y) (IOC_VOID|(x)|(y))
#define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y))
里面没有SIO_RCVALL的定义,但是你可以查看msdn中的ms-help://MS.MSDNQTR.2003FEB.2052/winsock/winsock/wsaioctl_2.htm看WSAIoctl函数中的SIO_RCVALL 的说明,你可以知道它是这样定义的:
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
即:
0x80000000|0x18000000|0x00000001=0x98000001
其中IOC_VENDOR 实际上是IOC_WS2|IOC_PROTOCOL ,因为要receive all IP packets on the network on win32 platform.
关于SIO_RCVALL
最新推荐文章于 2021-11-26 11:30:48 发布