【问题标题】:Socket level statistics in Linux/UnixLinux/Unix 中的套接字级别统计
【发布时间】:2015-12-06 00:53:09
【问题描述】:

有没有办法以编程方式知道 Linux/Unix 中套接字发送或接收的原始字节总数?

【问题讨论】:

  • socket编程中的Read()和write()函数分别返回接收和发送的字节数。只需将这些值相加即可。
  • @shivammitra,这些不是有效负载字节数吗?
  • 我怀疑它不在那里,因为并不总是可以将一个字节与单个套接字相关联。如果您通过 VPN 进行连接,两个不同连接的数据包被封装在一个 VPN 数据包中,而 VPN 数据包有一些开销?
  • 据我所知,没有。在 Linux 中,统计信息是按设备(请参阅/proc/net/dev)和每个进程(请参阅/proc/PID/net/dev)维护的,它们包括有效负载中的字节数和数据包数等。 (/sys/class/net/*/statistics/* 上特定于设备的统计数据是相同的值,每个伪文件只有一个字段。)在许多情况下(加速网卡),内核可能永远不会知道在线上发送/接收的实际字节/符号数,所以即使尝试解释它也是混乱/徒劳的。
  • 参见stackoverflow.com/questions/3337249/… 在 Linux/BSD 上如何从套接字收集统计信息您需要知道的一切。

标签: c linux sockets network-programming


【解决方案1】:

尝试以下方法:

int l = 0;
ioctl(sock, FIONREAD, &l);
if (l > 0)
{
  l = read(sock, buffer, l);
}

【讨论】:

  • l 是否仅包含应用程序字节的原始字节数?
  • 是的,FIONREAD ioctl 返回排队的所有数据消息中的数据字节数
猜你喜欢
  • 2021-12-08
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2011-12-27
  • 2012-08-07
  • 2015-05-07
  • 1970-01-01
相关资源
最近更新 更多