Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取inode以在/proc/net/udp中查找_C++_Sockets_Udp - Fatal编程技术网

C++ 获取inode以在/proc/net/udp中查找

C++ 获取inode以在/proc/net/udp中查找,c++,sockets,udp,C++,Sockets,Udp,我试图以编程方式跟踪接收缓冲区中的数据量。我正在接收UDP数据。在做了一些研究之后,似乎在Linux中实现这一点的唯一方法是查看/proc/net/udp。这似乎是一个很好的解决方案,直到我意识到两个应用程序可以监听同一个多播组,我需要区分它们。似乎我应该通过确定我的inode是什么来做到这一点 我花了一些时间研究这一点,有人建议sockfd_查找或sock_from_文件是一种方法,但在我的CentOS Linux机器上,这些功能似乎不可用 有人能帮我弄清楚/proc/net/udp中的哪一行

我试图以编程方式跟踪接收缓冲区中的数据量。我正在接收UDP数据。在做了一些研究之后,似乎在Linux中实现这一点的唯一方法是查看/proc/net/udp。这似乎是一个很好的解决方案,直到我意识到两个应用程序可以监听同一个多播组,我需要区分它们。似乎我应该通过确定我的inode是什么来做到这一点

我花了一些时间研究这一点,有人建议sockfd_查找或sock_from_文件是一种方法,但在我的CentOS Linux机器上,这些功能似乎不可用

有人能帮我弄清楚/proc/net/udp中的哪一行属于我的应用程序吗

我开始使用ioctl(handle、FIONREAD和bytesInBuffer)调用,只是为了发现在Linux中,这只返回缓冲区中第一个数据包的大小

谷歌似乎建议可以使用sockfd_查找调用来获取inode,但my/usr/local/include/中的grep不会返回这些函数


我的linux/net.h与我在谷歌上能找到的一些类似“socket”的结构相比,似乎非常简单,它包含sock成员,我相信它包含inode信息。我在CentOs上的linux/net.h只有58行,只有几个定义和一个枚举。

经过一点修改后,我注意到
readlink(“/proc/self/fd/$fd”)
(在linux 5.3下)给了我如下信息:

socket:[3753088]

回来。我可以对此进行解析,并使用生成的数字在
/proc/net/udp
中查找相关行:

sl local_address rem_address st tx_queue rx_queue tr tm->retrnsmt uid timeout inode ref指针下降时
2867:00000000:0BB8 00000000:0000 07 00000000:00000000:00000000 00000000 1000 0 3753088 2 00000000 3AE8E911 0
也就是说,我不明白你为什么要这么做,但没关系!
我也不知道你为什么不直接按sock和peer名称查找,这可能更容易

你的问题似乎与inode无关,这使得标题有点误导。我的理解是,我需要获取属于套接字句柄的inod,以便在/proc/net/udp中的inode列中查找正确的行。我的问题是关于C++如何在Linux上获得这个iNoD,我想通过正确的方式来解决iNoDo问题,我想正确地解决这个问题。帮助“我是否正确地接近这个问题”,为什么你想要这个信息?我一直在苦苦思索,为什么应用程序需要了解自己,可能是为了基准测试,也可能是为了监控利用率?