gpt4 book ai didi

networking - 如何检查客户端连接是否仍然存在

转载 作者:可可西里 更新时间:2023-11-01 02:33:42 26 4
gpt4 key购买 nike

我正在使用 epoll 进行网络编程。我有一个连接列表,并将每个客户端都放在列表中。如果用户正常断开连接,我可以通过读取 0 来检测用户断开连接。但是,如果用户以某种方式意外断开连接,那么在尝试向用户发送数据之前,它无法知道这一点。

我不认为 epoll 提供了一个很好的方法来处理这个问题..所以我认为我应该自己处理这个问题。如果你们能向我提供与此问题相关的任何示例或引用资料,我将不胜感激。

最佳答案

如果另一端断开连接,epoll_wait 将为套接字返回一个 EPOLLHUP 或 EPOLLERR。 EPOLLHUP 和 EPOLLERR 是自动设置的,但您也可以设置更新的 EPOLLRDHUP,它明确报告对等关闭。

此外,如果您使用带有 MSG_NOSIGNAL 标志的发送,它将在关闭的连接上设置 EPIPE。

int resp = send ( sock, buf, buflen, MSG_NOSIGNAL );

if ( resp == -1 && errno == EPIPE ) { /* other side gone away */ }

比收到信号好得多。

关于networking - 如何检查客户端连接是否仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com