【发布时间】:2012-02-09 14:02:16
【问题描述】:
我有一段简单的代码,它定期将数据写入传递给它的 fd。 fd 很可能是管道或套接字,但也可能是任何东西。每当我 write() 时,我都可以检测到套接字/管道何时关闭/损坏,因为我收到 EPIPE 错误(我忽略了 SIGPIPE)。但我不会一直写信给它,所以可能很长一段时间都检测不到关闭的套接字。我需要尽快对关闭做出反应。有没有一种无需执行 write() 即可检查 fd 的方法?如果我不写任何东西,我可以定期执行此操作。
【问题讨论】:
-
select、poll、epoll都会告诉你
-
感谢您的回答,但我不确定如何使用管道进行此操作。我已经尝试在写入中使用我的 fd 进行 select() 调用,但 fdset 除外,并且当管道损坏时调用的结果不会改变(总是在写入集中返回我的 fd)。我也尝试了 poll() 设置了所有事件,再次没有区别。
-
不要将你的 fd 推入 write fdsets。只有一个除外。
-
试过了,管道没有运气。