跟踪套接字(文件)描述符返回绑定地址

时间:2014-06-02 17:58:06

标签: c# c linux mono

我有一个正在运行的应用程序(C#/ mono)似乎在以下系统调用上循环:(我通过一系列的strace确定了这一点,发现此调用是目前唯一正在进行的)

recvfrom([sockfd], "", [length], 0, NULL, NULL)   = 0

读取recvfrom(http://linux.die.net/man/2/recvfrom)我发现第一个参数 sockfd 代表套接字文件描述符。

在不停止应用程序并包含调试逻辑/额外冗长以让我知道 sockfd 绑定到哪个套接字地址的情况下,有什么方法可以查看它吗?

我已经尝试过寻找可以从系统获得这些信息的任何参考资料,但没有提出太多

提前致谢,

2 个答案:

答案 0 :(得分:3)

您可以使用lsof命令列出类似这样的程序的所有打开的IP套接字

lsof | grep pid.*sd.*IP

其中

  • pid将替换为程序进程ID和
  • sd将被套接字描述符替换,如strace
  • 所示

答案 1 :(得分:1)

运行

lsof -p PID -a -d FD

查看进程FD的描述符PID是什么。你可以运行

lsof -p PID

查看进程使用的所有描述符,套接字和活动内存映射,以及

lsof -i4 -i6

查看所有进程的所有Internet连接。 man page包含有关lsof命令的更多信息,但它非常复杂;但是,示例部分是说明性的。