关于SIO_RCVALL

为什么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. 

你可能感兴趣的:(网络编程)