1

いくつかの raw ソケット (異なるプロトコルを持つ AF_INET および AF_PACKET ファミリ) を作成するユーザー空間アプリケーションがあります。デバッグを支援するために、これらのソケットの詳細 (たとえば、これらのソケットでキューに入れられたバイト/パケットの数) をプログラムで表示する必要があります。

FIONREAD ioctl と recv を MSG_PEEK フラグで使用してみましたが、どちらもソケットにキューイングされた最初のパケットのバイト数しか表示されません。

したがって、必要な詳細を取得するには、「/proc/PID/net/raw」ファイルを読み取る必要があるようです。 Q1: もっと良い方法はありますか?

Linux カーネルは、AF_INET ファミリーのソケットのみを raw ソケット ハッシュ テーブルに追加しますが、AF_PACKET ファミリーのソケットは追加しません。その結果、AF_INET ファミリーのソケットのみが「/proc/PID/net/raw」ファイルにリストされます。 Q2: AF_PACKET ファミリのソケットの詳細を取得する方法はありますか?

「/proc/PID/net/raw」ファイルを読み取ると、カーネルの送受信キューのバイト数を取得できます。 Q3: キューに入れられたパケットの数をどうにか取得できますか?

どんな助けでも大歓迎です。

ps: 私のプログラムは C で書かれていますが、他の言語のコード スニペットも喜んで見ていきます。

4

1 に答える 1