接收PCap库问题

PCap library issue with receive

本文关键字:问题 PCap 接收      更新时间:2023-10-16

所以我在PCap库的接收功能方面遇到了问题。

我在电脑外设置了一个echo服务器,它只需要接收一个数据包并将其翻转。因此,在我的应用程序中,我发送了一个数据包(工作正常),并尝试用pcap_next()接收响应数据包(来自echo服务器)。出于某种原因,即使Wireshark显示数据包在不到1ms的时间内被翻转,它也会等待1秒才能接收到pcap_next()的数据包。因此,当我发送1000个数据包时,需要1000秒才能接收到所有响应。

我不明白它为什么这么做,所以我试着切换到pcap_loop()。显然,现在它正在做一些更奇怪的事情。我发送了1000个数据包,接收了1000个信息包,但没有按照我期望的顺序。

我期待这个(这就是我在Wireshark上看到的):

Send packet #1
Receive packet #1
Send packet #2
Receive packet #2
etc.

但这就是我真正得到的:

Send packet #1
Send packet #2
etc.
Wait 1 second
Receive packet #1
Receive packet #2
etc.

这是怎么回事?

也许您想要轮询,而不是拉取。只需拨打pcap_dispatchpcap_loop,它就会尽快给您回电话并提供数据包。CCD_ 3是无效的,因为它启动调度循环并且在接收到第一个分组之后停止它。更多信息,请访问http://www.tcpdump.org/pcap.html

找到了解决方案。我需要将TX和RX放在两个独立的线程上。

RX线程永远做到这一点:

pcap_loop(handle, -1, got_packet, NULL);

然后我随时调用TX线程,它会这样做(并循环我需要的次数):

pcap_sendpacket(t, TxPacket, DataLen + 42);

这解决了问题。