查找打开套接字的详细信息

查找打开套接字的详细信息

我的程序使 TCP 套接字保持打开状态,我正在尝试追踪原因(我使用了许多不同的套接字)。 lsof 命令显示:

myprog  258981 root   56u     sock                0,8      0t0 2429743 protocol: TCP
myprog  258981 root   57u     sock                0,8      0t0 2430142 protocol: TCP
myprog  258981 root   58u     sock                0,8      0t0 2430553 protocol: TCP
myprog  258981 root   59u     sock                0,8      0t0 2430975 protocol: TCP
myprog  258981 root   60u     sock                0,8      0t0 2431371 protocol: TCP
myprog  258981 root   61u     sock                0,8      0t0 2431775 protocol: TCP

所以我思考这意味着最后一个 TCP 套接字在节点 2431775 处打开。所以我试图找到该套接字的更多信息。

如何找到套接字的更多详细信息(目标地址和端口)?

答案1

TCP 套接字没有 inode 号(也许在 Plan9 下有)。它没有“映射”到文件系统的任何位置。您可能会将其与 UNIX 域套接字混淆。

目前尚不清楚您希望在信息中找到什么。发生的情况是你的程序创建了一个套接字并且没有正确地处理它,另外,即使它这样做了,TCP状态机也可能会徘徊,例如等待未完成的ACK(取决于你做什么以及你的机器是如何配置的) 。因此,在您的代码中,查看创建套接字的位置。如果你感到困惑什么时候发生这种情况,strace可能会有所帮助。

相关内容