【发布时间】:2011-06-15 07:02:10
【问题描述】:
所以我一直遇到 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.
这是怎么回事?
【问题讨论】:
-
你试过
setsockoptw/TCP_NODELAY吗? (随机扔出去......我最近才读到这个,想知道它是否相关:en.wikipedia.org/wiki/Nagle%27s_algorithm) -
不适用。我正在发送原始 UDP 数据包。