Linux:检查套接字/管道是否损坏而不执行read()/ write()
发布时间:2020-12-13 19:15:01 所属栏目:Linux 来源:网络整理
导读:我有一段简单的代码,可以定期将数据写入传递给它的fd. fd很可能是一个管道或插座,但可能是任何东西.每当我写()时,我都可以检测到套接字/管道何时关闭/断开,因为我收到了EPIPE错误(我忽略了SIGPIPE).但是我不会一直写到它,因此很长一段时间都可能无法检测到已
我有一段简单的代码,可以定期将数据写入传递给它的fd. fd很可能是一个管道或插座,但可能是任何东西.每当我写()时,我都可以检测到套接字/管道何时关闭/断开,因为我收到了EPIPE错误(我忽略了SIGPIPE).但是我不会一直写到它,因此很长一段时间都可能无法检测到已关闭的套接字.我需要尽快对封闭做出反应.有没有一种方法可以检查fd而无需执行write()?如果我不写任何东西,我可以定期这样做.
解决方法struct pollfd pfd = {.fd = yourfd,.events = POLLERR}; if (poll(&pfd,1,whatever) < 0) abort(); if (pfd.revents & POLLERR) printf("pipe is brokenn"); 这对我有用.请注意,套接字不完全是管道,因此显示不同的行为( – >使用POLLRDHUP). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |