获取 inode 以便在 /proc/net/udp 中查找
Get inode for lookup in /proc/net/udp
>我正在尝试以编程方式跟踪接收缓冲区中的数据量。我正在接收 UDP 数据。在做了一些研究之后,似乎在Linux中做到这一点的唯一方法是查看/proc/net/udp。这似乎是一个很好的解决方案,直到我意识到两个应用程序可能正在侦听同一个多播组,我需要区分它们。似乎我应该通过确定我的索引节点是什么来做到这一点。
我花了一些时间研究这个问题,有人建议sockfd_lookup或sock_from_file是要走的路,但在我的 CentOS Linux 机器上,这些功能似乎不可用。
有人可以帮我找出/proc/net/udp 中的哪一行属于我的应用程序吗?
我开始使用 ioctl(handle、FIONREAD、&bytesInBuffer(调用,只是为了发现在 Linux 中,这只返回缓冲区中第一个数据报数据包的大小。
谷歌似乎建议sockfd_lookup调用可以用来获取索引节点,但我的/usr/local/include/中的grep不返回这些函数。
与我在谷歌上可以找到的一些相比,我的 linux/net.h 似乎相当简陋,其中包括像"socket"这样的结构,它有我认为具有 inode 信息的袜子成员。我在 CentOS 上的 linux/net.h 只有 58 行长,只有几个 #defines 和一个枚举。
经过一番摆弄,我注意到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->when retrnsmt uid timeout inode ref pointer drops 2867: 00000000:0BB8 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 3753088 2 000000003ae8e911 0
说,我不明白你为什么要这样做,但没关系! 我也不确定你为什么不按袜子和同行的名字查找,这可能更容易。
- 从udp接收帧对于人脸识别来说太慢
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- boost::asio UDP 广播客户端仅接收"fast"数据包
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- 如何通过UDP接收QByteArray并将其解析为位字段结构?
- 发送固定大小的 UDP 数据包
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- 使用 UDP 中断 while()-循环
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- C++ DLL(不是 CLI)是否可以调用 .NET Core 3.0 委托?
- System.AccessViolationException:shared_ptr C# .NET 和 C++ 应用程
- 如何在 2 台主机之间保持 UDP 套接字连接打开
- 获取 inode 以便在 /proc/net/udp 中查找
- google ProtoBuf在c++上与ProtoBuf -net在c# (UDP)上聊天