我想获得套接字描述符参考计数。这个计数存储在哪里?我没有在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。
请注意,只有较新的内核才有此套接字参考计数列信息。