所以我一直对 PCap 库的接收功能有疑问。
我设置了一个回显服务器(在我的 PC 之外),它只接收一个数据包并将其转过来。因此,在我的应用程序中,我发送了一个数据包(工作正常)并尝试使用 pcap_next() 接收响应数据包(来自回显服务器)。出于某种原因,它会等待整整 1 秒才能使用 pcap_next() 接收数据包,即使 Wireshark 显示数据包在不到 1 毫秒的时间内被翻转。因此,当我发送 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.
这里发生了什么?