什么是 EOF 处的阻塞行为

问题描述 投票:0回答:1

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

如以下顺序:

  1. read
    返回 -1 并且
    errno
    设置为
    EWOULDBLOCK
    EAGAIN
  2. read
    返回0,表示已经到达EOF

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

  1. read
    返回 -1 并且
    errno
    设置为
    EWOULDBLOCK
    EAGAIN
  2. read
    返回值 > 0
  3. read
    返回0,表示已经到达EOF

也就是说,

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

sockets eof nonblocking file-descriptor
1个回答
1
投票

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

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

如果连接被对等方关闭并且 FIN 被本地操作系统接收并完全处理,那么

recv
将不会返回 EWOULDBLOCK 但会发出 EOF 信号(假设到目前为止所有数据都已读取)。

© www.soinside.com 2019 - 2024. All rights reserved.