特定のファイル記述子または特定のインターフェイスの 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?このソケットで実際に受信したバイト数は?」という単純な情報を提供することは価値があります。