特定のファイル記述子または特定のインターフェイスの TCP ペイロード アクティビティ (受信した合計バイト数) のカウンターを検索したいと思います。指定されたファイル記述子が望ましいですが、インターフェイスの場合は十分です。理想的には、ユーザー空間にまだ読み込んでいない (まだ?) バイトであっても、ack されたバイトについて本当に知りたいです。
TCP_INFO
の機能を見てきましたgetsockopt()
が、私が知る限り、「受信した合計バイト数」または「送信された合計バイト数 (ACK など)」を格納するフィールドはありません。
netlink
IFLA_STATS
インターフェイスの+RTNL_TC_BYTES
とSIOCETHTOOL
+ ETHTOOL_GSTATS
ioctl()
(フィールド)も見ましたrx_bytes
が、それらは素晴らしいですが、他のレイヤーのオーバーヘッド/ヘッダーと実際のペイロード バイトを区別できるとは思いません。
procfs
持っています/proc/net/tcp
が、これには私が探しているものが含まれていないようです。
この特定のデータを取得する方法はありますか?
編集:無差別モードはスループットに耐え難い影響を与えるため、それを使用するものを活用することはできません。言うまでもなく、どのパケットが適切かを判断するために IP スタックの大部分を実装することは、このソリューションの意図した範囲を超えています。
目標は、recvmsg() からどのような値を保存するかについて、包括的な/信頼できない/2 つ目の推測を行うことです。
Right Thing™ は、これらの値を正しく追跡することですが、「Hey OS?このソケットで実際に受信したバイト数は?」という単純な情報を提供することは価値があります。