什么是EOF的阻止行为

What is blocking behaviour at EOF

提问人:user877329 提问时间:5/16/2023 更新时间:5/16/2023 访问量:39

问:

在检测到 EOF 之前,对已到达 EOF 的文件描述符(在本例中为非阻塞套接字)的读取是否有可能阻塞?

如以下顺序所示:

  1. read返回 -1 并设置为 orerrnoEWOULDBLOCKEAGAIN
  2. read返回 0,表示已达到 EOF

如果它正在等待数据,它会始终看起来像这样吗:

  1. read返回 -1 并设置为 orerrnoEWOULDBLOCKEAGAIN
  2. read返回一个值> 0
  3. read返回 0,表示已达到 EOF

也就是说,是否意味着将有更多可用数据,或者当文件描述符再次可用时是否有可能没有更多数据?EWOULDBLOCK

套接字 eof 非阻塞 文件描述符

评论


答:

1赞 Steffen Ullrich 5/16/2023 #1

...EWOULDBLOCK 是否意味着将有更多可用数据

不。EWOULDBLOCK只说目前没有可用的数据。它不会对未来的流量做出任何声明,即是否会到达新数据或连接是否会关闭。

如果连接被对等体关闭,并且本地操作系统接收并完全处理了 FIN,则不会返回 EWOULDBLOCK,而是会向 EOF 发出信号(假设到目前为止的所有数据都已读取)。recv