求救!!!select错误10038

magicyang87 2008-11-27 08:32:52
使用WSAGETLASTERROR得到的是10038,SOCKET不存在,麻烦大家看下,多谢,源码如下:

pcap_open(d->name,65536,0,1000, 0,errbuf);
if (p == NULL)
{
strTemp.Format ("pcap_open failed:%s",errbuf);
goto error;
}

/* get the subnet mask of the interface */
if (pcap_lookupnet(device, &local_net, &netmask, errbuf) == -1)
{
strTemp.Format ("get the subnet mask of the interface failed:%s",errbuf);
goto error;
}
/* compile the BPF filter code */
if (pcap_compile(p, &filter_code, GNIP_FILTER, 1, netmask) == -1)
{
strTemp.Format ("compile the BPF filter code failed");
goto error;
}
/* apply the filter to the interface */
if (pcap_setfilter(p, &filter_code) == -1)
{
strTemp.Format ("apply the filter to the interface failed");
goto error;
}
pcap_fd = pcap_fileno(p);

TRACE1 ("pcap_fd=%d\n",pcap_fd);
while(1)
{
FD_ZERO(&rfd_set);
FD_SET(pcap_fd, &rfd_set);
ret =select(pcap_fd+1, &rfd_set, NULL, NULL,NULL);
if(ret < 0)
{
strTemp.Format ("select error:%d",WSAGetLastError ());
goto error;
}
}

...全文
683 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
magicyang87 2008-11-29
  • 打赏
  • 举报
回复
windows中select也可以对文件进行操作,要不然select的作用会被降低的
这个我待会试下,暂时我只是另起了一个线程将就着了,多谢楼上几位
dirdirdir3 2008-11-28
  • 打赏
  • 举报
回复
winpcap自己有相应的函数可以调用吧......
dch4890164 2008-11-28
  • 打赏
  • 举报
回复
这网速 日
dch4890164 2008-11-28
  • 打赏
  • 举报
回复
你不能select有两方面的原因
pcap_fd = pcap_fileno(p);//看一下pcap_fd的值在这是否有变化
FD_SET(pcap_fd, &rfd_set);//看一下rfd_set是否有变化
另外就是用FD_SET(fileno(p), &rfd_set);试验一下看能否select成功而不用pcap_fileno

dch4890164 2008-11-28
  • 打赏
  • 举报
回复
你不能select有两方面的原因
pcap_fd = pcap_fileno(p);//看一下pcap_fd的值在这是否有变化
FD_SET(pcap_fd, &rfd_set);//看一下rfd_set是否有变化
另外就是用FD_SET(fileno(p), &rfd_set);试验一下看能否select成功而不用pcap_fileno

dch4890164 2008-11-28
  • 打赏
  • 举报
回复
你不能select有两方面的原因
pcap_fd = pcap_fileno(p);//看一下pcap_fd的值在这是否有变化
FD_SET(pcap_fd, &rfd_set);//看一下rfd_set是否有变化
另外就是用FD_SET(fileno(fp), &rfd_set);试验一下看能否select成功而不用pcap_fileno

dch4890164 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 magicyang87 的回复:]
我知道原因了,原来是因为windows中select只能对socket进行操作,不能对文件进行操作。
楼上的高人再请教下,我是想通过winpcap抓包的,请问这种情况有办法用select吧,或者有没有其它的替代方法?
[/Quote]
windows中select也可以对文件进行操作,要不然select的作用会被降低的

FILE* fp = stdin;
fd_set rset;
FD_ZERO(&rset);
FD_SET(fileno(fp),&rset);

需要转一下
magicyang87 2008-11-27
  • 打赏
  • 举报
回复
我知道原因了,原来是因为windows中select只能对socket进行操作,不能对文件进行操作。
楼上的高人再请教下,我是想通过winpcap抓包的,请问这种情况有办法用select吧,或者有没有其它的替代方法?
cnzdgs 2008-11-27
  • 打赏
  • 举报
回复
调试,注意rfd_set中的值是否有变化。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧