我的程序使 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
可能会有所帮助。