如何在用户级别获取套接字描述符的引用计数?

时间:2017-09-18 06:12:15

标签: linux sockets linux-kernel file-descriptor

我想获取套接字描述符引用计数。这个计数存储在哪里?我没有在inode结构中找到它。 我怎样才能得到这个值?

1 个答案:

答案 0 :(得分:0)

每个协议都可以在/proc/net/*个文件中使用。

例如,the official /proc/net/tcp documentation表示在socket reference count值之后有一个inode列。见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.

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