我想为给定的文件描述符或给定的接口查找 TCP 有效负载活动的计数器(接收的总字节数)。最好是给定的文件描述符,但对于接口就足够了。理想情况下,我真的很想知道任何已确认的字节,即使是我尚未读入用户空间的字节(还没有?)。
据我所知,我已经看到了的TCP_INFO
功能,getsockopt()
但似乎没有一个字段存储“接收的总字节数”或“传输的总字节数(确认,例如)”。
我还看到了接口的netlink
IFLA_STATS
+RTNL_TC_BYTES
和SIOCETHTOOL
+ ETHTOOL_GSTATS
ioctl()
(rx_bytes
字段),它们很棒,但我认为它们无法区分其他层的开销/标头和实际的有效负载字节。
procfs
有/proc/net/tcp
,但这似乎也不包含我正在寻找的东西。
有什么办法可以得到这个特定的数据?
编辑:混杂模式对吞吐量有难以承受的影响,所以我不能利用任何使用它的东西。更不用说实现 IP 堆栈的大部分来确定哪些数据包是合适的,这超出了我对这个解决方案的预期范围。
目标是对我从 recvmsg() 存储的值有一个总体/不信任/第二次猜测。
Right Thing™ 要做的是正确跟踪这些值,但如果有一个简单的“嘿操作系统?我在这个套接字上真正收到了多少字节?”将是有价值的。