gpt4 book ai didi

Linux:在不执行 read()/write() 的情况下检查套接字/管道是否损坏

转载 作者:IT王子 更新时间:2023-10-29 00:25:31 26 4
gpt4 key购买 nike

我有一段简单的代码,它定期将数据写入传递给它的 fd。 fd 很可能是管道或套接字,但也可能是任何东西。每当我 write() 到它时,我都可以检测到套接字/管道何时关闭/损坏,因为我收到 EPIPE 错误(我忽略了 SIGPIPE)。但我不会一直写信给它,所以可能很长时间都检测不到关闭的套接字。我需要尽快对关闭使用react。是否有一种无需执行 write() 即可检查 fd 的方法?如果我不写任何东西,我可以定期这样做。

最佳答案

struct pollfd pfd = {.fd = yourfd, .events = POLLERR};
if (poll(&pfd, 1, whatever) < 0) abort();
if (pfd.revents & POLLERR) printf("pipe is broken\n");

这对我有用。请注意,套接字不完全是管道,因此表现出不同的行为(-> 使用 POLLRDHUP)。

关于Linux:在不执行 read()/write() 的情况下检查套接字/管道是否损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9212243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com