【发布时间】:2015-07-20 05:51:02
【问题描述】:
如果我的问题重复,我真的很抱歉,但我没有在网站上找到有用的信息。
我正在使用非阻塞套接字和 select()。如何检测客户端是否关闭了非阻塞套接字上的连接?我看到当没有数据可供读取以及连接关闭时,read() 返回 -1 和 errno = EWOULDBLOCK。
如何区分上述情况?
【问题讨论】:
如果我的问题重复,我真的很抱歉,但我没有在网站上找到有用的信息。
我正在使用非阻塞套接字和 select()。如何检测客户端是否关闭了非阻塞套接字上的连接?我看到当没有数据可供读取以及连接关闭时,read() 返回 -1 和 errno = EWOULDBLOCK。
如何区分上述情况?
【问题讨论】:
当对端关闭连接时:
select() 将返回可读的套接字。recv() 或read() 将返回零。当没有数据可供读取时,我看到 read() 返回 -1 且 errno = EWOULDBLOCK
正确,但连接没有关闭。
以及连接关闭时。
不,你没有。这是不正确的。它返回零。
如何区分上述情况?
它们不一样,它们的表现方式也不相同。
【讨论】:
read() 返回零,这可能是在一秒钟、一年或一个世纪之后。
【讨论】: