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

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

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

我如何区分上述案件?

最佳答案 当对等方关闭连接时:

> select()将使套接字可读.
>套接字上的recv()或read()将返回零.

I saw that a read() returns -1 with errno = EWOULDBLOCK when no datas are available to be read

正确,但连接未关闭.

and also when a connection is closed.

不,你没有.那不对.它返回零.

How can I discriminate above cases?

他们不一样,他们也没有以同样的方式表现出来.

点赞