0

我在接收 UDP 数据包时遇到问题。我的环境在 ARMv7 上运行 Android 2.1。使用 C 套接字编程,我使用recvmsg从内核接收数据包,但偶尔会出现一些丢包事件。发送方和接收方在同一个局域网中,因此毫无疑问数据包不应该丢失。我通过Wireshark证明了这一点。

但是,在我将recvmsg 替换为recvfrom接收数据包后,不再发生丢包事件。

我确定recvmsg的返回值总是大于 0,这意味着不会发生错误。

是否有可能仅在使用recvmsg时才会在内核空间中丢弃某些数据包?

4

3 回答 3

2

是的,这是可能的。UDP不可靠。如果丢弃 UDP 数据报会造成问题,那么您的设计就有很大问题。

于 2012-07-16T10:21:41.720 回答
1

通过 . 检查您的插座是否有掉落物cat /proc/net/udp

于 2012-07-16T12:59:22.877 回答
-1

这个recv 手册页似乎表明recvmsg 不 block,而recvfrom 确实 block,至少在默认情况下是这样。您可能正在调用 recvmsg 并且此时没有可用的数据包。如果您反复调用它,我想您最终可能会像在wireshark中一样看到所有数据包。

于 2014-07-31T18:52:02.350 回答