C 如何判断另一端的tcp socket is closed?

现在的解决方法

// server端是否断开连接
bool is_server_disconnected(int client_socket)
{
    // 非阻塞
    set_flag(client_socket, O_NONBLOCK);
    char buffer[10];
    int length = recv(client_socket, buffer, 10, 0);
    clr_flag(client_socket, O_NONBLOCK);
    return length == 0;
}

把client_socket设置成了非阻塞,然后recv如果返回0了,说明remote socket is closed.

When a stream socket peer has performed an orderly shutdown, the
return value will be 0 (the traditional "end-of-file" return).

Linux man

其他方法

tcp断开暂借不考虑,不知道有没有更简单更好的方法??

阅读 3.9k
1 个回答

poll man
可以跳过系统缓冲区检测socket状态,并且可以轻松实现监管所有子线程。

POLLHUP for 正常关闭
POLLERR for 程序挂了

想要检测网线挂了的话只能发心跳包,SO_KEEPALIVE

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题