设置网卡混杂模式 总是返回10022异常

设置网卡混杂模式 总是返回10022错误
写一个抓包程序,但是设置混杂模式抓所有IP包失败,WSAIoctl后WSAGetLastError总是返回10022,请高手指点,代码如下:
int err;
char name[100];
hostent *pHostent;
int port=18310;
SOCKADDR_IN sockaddr;
SOCKET m_RawSock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
if(m_RawSock==INVALID_SOCKET)
{
return WSAGetLastError(); //socket创建失败
}

err=gethostname(name,100);
if(err==SOCKET_ERROR)
{
return WSAGetLastError(); //取本机用户名失败
}

pHostent=gethostbyname (name);

sockaddr.sin_family=AF_INET;
sockaddr.sin_port=htons(port);
memcpy(&sockaddr.sin_addr.s_addr,pHostent->h_addr_list[0],
pHostent->h_length);

//free(pHostent);

err=bind(m_RawSock,(SOCKADDR *)&sockaddr,sizeof(sockaddr));//绑定
if(err==SOCKET_ERROR)
{
return WSAGetLastError(); //取本机用户名失败
}
BOOL bOptval=TRUE;

//设置套节字选项
setsockopt(m_RawSock,SOL_SOCKET,SO_REUSEADDR,(char*)&bOptval,sizeof(bOptval));
err=setsockopt(m_RawSock,IPPROTO_IP,IP_HDRINCL,(char*)&bOptval, //IP_HDRINCL该选项使之能操作IP头
sizeof(bOptval));
if(err==SOCKET_ERROR)
{
return WSAGetLastError(); //设置套节字选项失败
}

//把网卡置于混杂模式。获取IO操作的相关信息

DWORD dwBufferLen[10] ;
DWORD dwBufferInLen = 1 ;
DWORD dwBytesReturned = 0 ;
err=WSAIoctl (
m_RawSock,                                               
SIO_RCVALL,       //设置SOCK_RAW为SIO_RCVALL,以便接收所有的IP包  
//SOCK_RAW,
&dwBufferInLen,                                     
sizeof(dwBufferInLen),                                       
&dwBufferLen,                                    
sizeof(dwBufferLen),                                      
&dwBytesReturned,                              
NULL,                           
NULL  
);//最后两参数设置非阻塞


if(err==SOCKET_ERROR)
{
return WSAGetLastError(); //设置套节字选项失败
}
return 0;

------解决思路----------------------
并不是所有网卡都支持混杂模式。
------解决思路----------------------
特别是无线网卡很多都不支持的