小编Boo*_*r B的帖子

TCP 死链接检测

如何检测 TCP 连接中的死链接?当有人拉扯网线、关闭网络接口、打开 WiFi 或者像我这样......拔掉电源时,就会发生死链接。

Keep-alive 只对客户端有效,对服务器无效。

服务器只是接收数据,从不发送,因此使用 TCP_USER_TIMEOUT 将不起作用,因为发送 q 将始终为空。

我不想实现速度损失的应用层协议原因。(不再是零拷贝)

有效的一件事是发送 oob 数据,但因为你不应该再使用它了......

在下面编写的测试之后,您将看到客户端连接将在预期的短时间内关闭。 但是服务器会认为它已连接,永远......到目前为止等了3小时......

到目前为止,我在 3.13(Kubuntu) 和 3.18(OpenWrt) Linux 内核上对此进行了测试。这是一个错误吗?到目前为止,我已经阅读了很多 tcp/socket 编程书籍......根本没有帮助。请伙计们我需要你的帮助:)

我正在使用异步/非阻塞 io (epoll),因此发送和 rcv 超时也不起作用。

UPDATE2:现在有 x64/x86 的剪切源

添加:我以为我可以通过 epoll 事件捕获错误。

但是如果发生错误,我是否需要询问套接字?

到目前为止我尝试过的:

#define MAX_EVENTS      64
#define CON_RETRY_TIMEOUT   10      /* time to wait in sec until next connect attempt */
#define CON_TIMEOUT     10      /* time in sec after which stop trying to connect */
#define CON_IDLE        10      /* time in sec after which …
Run Code Online (Sandbox Code Playgroud)

c linux posix network-programming tcp

5
推荐指数
1
解决办法
1561
查看次数

标签 统计

c ×1

linux ×1

network-programming ×1

posix ×1

tcp ×1