我有一个用户空间应用程序,它创建了几个原始套接字(具有不同协议的 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 家族的sockets 的详细信息吗?
通过读取“/proc/PID/net/raw”文件,我可以获得内核发送和接收队列中的字节数。 Q3:我能以某种方式获得排队的数据包数量吗?
任何帮助将不胜感激。
ps:我的程序是用 C 语言编写的,但我也很乐意查看其他语言的代码片段。