0

UDP パケットの受信に問題があります。私の環境では、ARMv7 で Android 2.1 を実行しています。C ソケット プログラミングでは、recvmsgを使用してカーネルからパケットを受信しますが、パケット ロス イベントが発生することがあります。送信者と受信者は同じ LAN 内にあるため、パケットが失われないことは間違いありません。そして、私はWiresharkでそれを証明しました。

しかし、パケットを受信するためにrecvmsgrecvfromに置き換えた後、パケット損失イベントは発生しなくなりました。

確かに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 man ページは、少なくともデフォルトでは、 recvmsg はブロックしないがrecvfrom はブロックすることを示しているようです。recvmsg を呼び出している可能性があり、その時点で利用可能なパケットはありません。繰り返し呼び出すと、wireshark の場合と同じように、最終的にすべてのパケットが表示される可能性があると思います。

于 2014-07-31T18:52:02.350 に答える