1

我有一个用于网络连接管理的 aysnc 线程池模型。一个持续调用 poll() 的调度程序线程和一个读/写一次 poll() 指示的工作线程池。

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

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

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

4

1 回答 1

0

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

于 2017-04-21T23:10:34.640 回答