This question already has answers here:
How to handle the Linux socket revents POLLERR, POLLHUP and POLLNVAL?

(4个答案)


已关闭6年。




手册说民意测验(2):

到底有什么区别?编写一个简单的程序表明,如果我关闭文件描述符,然后尝试从关闭的fd中读取,POLLNVAL将触发。但是,我不知道返回POLLHUP的方法。

最佳答案

POLLNVAL等效于EBADF:它意味着文件描述符实际上并未引用任何打开的文件,即它是close d或从不以打开开头。除非由于编程错误或故意尝试查询文件描述符是否无效,否则这种情况永远不会发生。外部条件(例如,对等项关闭网络套接字或管道的末端)永远无法将文件描述符关闭到套接字或管道的末端。如果可能的话,这基本上将在使用套接字/管道/等的任何程序中导致大量漏洞。

另一方面,POLLHUP表示您的文件描述符有效,但处于以下状态:



资料来源:http://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html

如果要查看POLLHUP,只需打开pipe,关闭阅读端,然后使用poll查询书写端。

09-04 16:03