检测非阻塞套接字上的关闭连接

Luc*_*rte 5 c sockets io

如果我的问题重复,我真的很抱歉,但我没有在网站上找到有用的信息。

我正在使用非阻塞套接字和 select()。如何检测客户端是否关闭了非阻塞套接字上的连接?我看到当没有数据可供读取以及连接关闭时, read() 返回 -1 和 errno = EWOULDBLOCK 。

如何区分上述情况?

use*_*421 6

当对等方关闭连接时:

  1. select()将返回可读的套接字。
  2. 套接字上的recv()或将返回零。read()

我看到当没有数据可供读取时, read() 返回 -1 且 errno = EWOULDBLOCK

正确,但连接未关闭。

以及当连接关闭时。

不,你没有。这是不正确的。它返回零。

我如何区分以上情况?

它们并不相同,而且它们的表现方式也不同。