我有一个用户空间应用程序,它创建了几个原始套接字(具有不同协议的AF_INET & AF_PACKET家族)。为了帮助调试,我需要以编程方式显示这些套接字的详细信息(例如,在这些套接字上排队的字节/数据包的数量)。
我尝试使用带有MSG_PEEK标志的FIONREAD和recv,但这两种方法都只给出了在套接字中排队的第一个数据包的字节数。
因此,我似乎需要读取"/proc/PID/net/raw“文件才能获得所需的详细信息。Q1:有更好的方法吗?
Linux内核只将AF_INET家族的套接字添加到其原始套接字哈希表中,而不添加AF_PACKET家族的套接字。因此,"/proc/PID/net/raw“文件中只列出了AF_INET家族的套接字。Q2:有没有办法了解AF_PACKET家族的套接字的详细信息?
通过读取"/proc/PID/net/raw“文件,我可以获得内核的发送和接收队列中的字节数。Q3:我能以某种方式得到排队的数据包的数量吗?
任何帮助都将不胜感激。
p.s:我的程序是C语言的,但是我也很乐意看其他语言的代码片段。
发布于 2013-05-05 09:29:12
这是对问题2的答复。
不,不可能获得AF_PACKET系列的套接字的详细信息(至少不能通过Linux内核获得)。这是因为对于AF_PACKET系列的套接字,内核中的整个协议栈被跳过,数据包直接传递给创建套接字的用户空间应用程序。
https://stackoverflow.com/questions/12742641
复制相似问题