如何在用户级别上获取套接字描述符的参考计数



我想获得套接字描述符参考计数。这个计数存储在哪里?我没有在Inode结构中找到它。我如何获得此值?

可以根据 /proc/net/*文件中的协议可用。

例如,官方/proc/net/tcp文档表示在inode值之后有一个socket reference count列。请参阅https://askubuntu.com/a/243441

$ cat /proc/net/tcp
sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
 0: 0100007F:0CEA 00000000:0000 0A 00000000:00000000 00:00000000 00000000   115        0 14759 1 0000000000000000 100 0 0 10 -1

这里的Inode为14759,套接字参考数为1。

UDP有类似的ref列 - 请参阅https://stackoverflow.com/a/18322579/458259

$ cat /proc/net/udp   
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops             
  40: 00000000:0202 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 3466 2 ffff88013abc8340 0           

这里的Inode为3466,套接字参考数为2。

请注意,只有较新的内核才有此套接字参考计数列信息。

最新更新