gpt4 book ai didi

c - 阻塞 pcap 和多个 I/O `select `

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:00 24 4
gpt4 key购买 nike

我想用pcap抓包然后将捕获的数据包发送到另一台主机我的源代码片段是这样的:

            for(;;){
pcap_packet = pcap_next(pcap_handler, &pcap_header);
if(pcap_packet !=NULL)
printf("capture a packet with length of %d\n", pcap_header.len);

// send the packet as payload to the sender, excluding the Ethernet Header
n = send(sd_proxy, pcap_packet+ETHERNET_HDR_LEN, pcap_header.len-ETHERNET_HDR_LEN, 0);
if(n<0){
shutdown(connfd, SHUT_RDWR);
close(connfd);
break;
} new

}

所以基本上,我希望程序被 pcap_next 阻止一次套接字 sd_proxy 与另一台主机建立 TCP 连接,如果另一台主机启动主动 TCP 关闭,我想检测到这一点主动关闭。理想情况下,我应该使用 selectn=recv(rd_fd, ...)如果另一台主机启动主动关闭,select 会注意到 rd_fd 有内容,然后我会查看是否为“n=0”。但是用pcap,select不能配合pcap

那么如何完成我的任务呢?谢谢!

最佳答案

select can't cooperate with pcap

为什么不呢?您是否尝试过在 pcap_handler 上使用 pcap_get_selectable_fd() 并将生成的文件描述符添加到您的 select() 调用中设置的文件描述符?

您在 Linux 上工作,所以它应该可以正常工作。

(如果您在使用 BPF 的系统上运行,例如 *BSD 或 OS X,您可能会遇到这个问题,至少对于那些操作系统的旧版本;各种 *BSD 都有他们的 select-with-BPF bug 修复了一段时间;在 OS X 上,我在 Lion 中修复了它,所以它可能在 Snow Leopard 和更早版本上有问题。)

关于c - 阻塞 pcap 和多个 I/O `select `,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com