检测非阻塞套接字

时间:2015-05-09 10:10:28

标签: c sockets io

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

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

我如何辨别上述情况?

2 个答案:

答案 0 :(得分:2)

当对等方关闭连接时:

  1. select()会将套接字恢复为可读。
  2. 套接字上的recv()read()将返回零。
  3.   

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

    正确,但连接尚未关闭。

      

    以及连接关闭时。

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

      

    我如何辨别上述情况?

    他们不是一样的,他们也不会以同样的方式表现出来。

答案 1 :(得分:0)

当对等方关闭了特定套接字的连接时,对此套接字上的read()的调用将返回0。此行为独立于套接字的阻塞状态。

来自我man 2 read斜体):

  

返回值

     

成功时,返回读取的字节数( 0表示文件结束