急问关于setsockopt设置不成功
我想得到本机接收到的所有IP包和发送一些包出去,且需要完整的IP头(因为要进行分析)。写了如下的代码:
WSADATA wsd;
if(WSAStartup(MAKEWORD(2,2),&wsd)){
MessageBox("不能装载Winsock2库");
return false;
}
SOCKET rawsock=-1;
if(socket(AF_INET,SOCK_RAW,IPPROTO_RAW)==INVALID_SOCKET){
MessageBox("无法构造rawsock");
closesocket(rawsock);
return false;
}
bool flag=true;
if(setsockopt(rawsock,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(flag))==SOCKET_ERROR){
int i=WSAGetLastError();
MessageBox("无法设置rawsock");
closesocket(rawsock);
return false;
}
每次执行到这里的时候都是弹出"无法设置rawsock",查看出错代码为10022,即WSAEINVAL:level is not valid, or the information in optval is not valid。
我把socket()的第三个参数改成IPPROTO_ICMP、IPPROTO_IP,都一样是setsockopt出错,代码10022,请问怎么会非法呢?msdn上是这样写的啊。
如果不设置IP_HDRINCL标记能不能得到完整的IP头的包呢?vc6,win2000pro环境下.