用于识别文件描述符是否已损坏的脚本

用于识别文件描述符是否已损坏的脚本

问题:我正在运行一个服务器程序,它使用 TCP 套接字连接到远程程序。其中有很多(比如说 20 个)。我的问题是套接字描述符之一已损坏并且已收到 EOF。但由于程序中的错误,它永远不会关闭它,而是将其添加回 select() 集合并导致不必要的痛苦。

我做了什么才找到它:我附加到 DDB,并对它们中的每个调用 read(fd,..) 。坏描述符返回 0,我在那里点击了它。

虽然这对我有用,但会浪费来自其他套接字的字节,并且其他函数可能会出现错误。

我在寻找什么是想了解一种非侵入式机制,可以在不影响正在运行的程序的情况下解决我的目的。

顺便说一句,我的 NetBSD 系统只理解 tcsh。

答案1

在 BSD 派生系统中,调查另一个正在运行的进程中打开的文件描述符的规范方法是使用fstat(1) 命令(使用-p指定感兴趣的进程 ID 的选项)。

fstat输出中可以判断对等方是否已关闭 TCP 连接。

但是,如果问题实际上是您拥有源代码的程序中的错误,那么您可能应该-g使用适当的用户级调试器(例如本机提供的gdb.

相关内容