读取达到 EOF 的文件描述符(在本例中为非阻塞套接字)是否有可能在检测到 EOF 之前阻塞?
如以下顺序:
read
返回 -1 并且 errno
设置为 EWOULDBLOCK
或 EAGAIN
read
返回0,表示已经到达EOF或
如果它正在等待数据,它会一直看起来像这样吗:
read
返回 -1 并且 errno
设置为 EWOULDBLOCK
或 EAGAIN
read
返回值 > 0read
返回0,表示已经到达EOF也就是说,
EWOULDBLOCK
是否意味着会有更多的数据可用,或者当文件描述符再次可用时可能没有更多的数据?
... EWOULDBLOCK 是否意味着会有更多可用数据
没有。 EWOULDBLOCK 只说有当前没有可用数据。它不会对未来的流量做出任何陈述,即是否有新数据到达或连接是否会关闭。
如果连接被对等方关闭并且 FIN 被本地操作系统接收并完全处理,那么
recv
将不会返回 EWOULDBLOCK 但会发出 EOF 信号(假设到目前为止所有数据都已读取)。