recv()
函数用于从套接字接收数据
recv()
返回 0:这通常表示连接已经正常关闭。对方已经发送了 FIN 包,请求关闭连接。这是一个正常的退出情况,通常意味着在一次正常的通信会话结束。recv()
返回 -1:这表示在接收数据时发生了错误。当 errno
(在 Linux 中)或 WSAGetLastError()
(在 Windows 中)设置为 EAGAIN
或 EWOULDBLOCK
时,表示没有数据可用且套接字处于非阻塞模式。当 errno
或 WSAGetLastError()
设置为 ETIMEDOUT
时,表示在指定的超时时间内没有收到数据,发生了超时。因此,当 (recv() == 0)
时,表示连接已经正常关闭,而不是超时。要检查超时,请检查 errno
或 WSAGetLastError()
是否设置为 ETIMEDOUT
。
领取专属 10元无门槛券
手把手带您无忧上云