gim*_*ilk 7 sockets linux pipe
我有一段简单的代码,可以定期将数据写入传递给它的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 broken\n");
Run Code Online (Sandbox Code Playgroud)
这对我有用.请注意,套接字不完全是管道,因此显示不同的行为( - >使用POLLRDHUP).