轮询后的Read()返回POLLIN和POLLERR

时间:2017-04-21 22:36:36

标签: c linux sockets network-programming poll-syscall

我有一个用于网络连接管理的aysnc线程池模型。一个调度程序线程,它一直调用poll()和一个工作线程池 读/写一次poll()表示如此。

考虑一个poll()表示套接字已准备就绪的情况。但是工作线程尚未处理读取。我禁用read-poll,而工作线程没有处理读取。现在远程端断开连接并轮询() 返回POLLERR / POLLHUP。当工作线程在此之后执行read()调用时会发生什么?

即使有一些数据尚未被读取,read()是否会返回< 0?或

即使套接字有POLLERR / POLLHUP,read()是否从网络读取数据?

1 个答案:

答案 0 :(得分:0)

所有待处理的数据将在read()返回零之前传递。但是,如果read()返回-1,则挂起的数据可能已丢失。