【发布时间】:2012-10-05 08:44:56
【问题描述】:
我有一个用户空间应用程序,它创建了几个原始套接字(具有不同协议的 AF_INET 和 AF_PACKET 系列)。 为了帮助调试,我需要以编程方式显示这些套接字的详细信息(例如,在这些套接字上排队的字节数/数据包数)。
我尝试使用 FIONREAD ioctl 和带有 MSG_PEEK 标志的 recv,但是这两个都只给了我在套接字中排队的第一个数据包的字节数。
看来我需要阅读“/proc/PID/net/raw”文件以获取所需的详细信息。 Q1:有没有更好的方法?
Linux 内核仅将 AF_INET 系列的套接字添加到其原始套接字哈希表中,而不是 AF_PACKET 系列的套接字。因此,“/proc/PID/net/raw”文件中仅列出了 AF_INET 系列的套接字。 Q2:有什么方法可以获取 AF_PACKET 系列的 socket 的详细信息?
通过读取“/proc/PID/net/raw”文件,我可以获得内核发送和接收队列中的字节数。 Q3:我能否以某种方式获取排队的数据包数量?
任何帮助将不胜感激。
p.s:我的程序是用 C 语言编写的,但我也很乐意查看其他语言的 sn-ps 代码。
【问题讨论】:
标签: sockets linux-kernel