我有以下情况: TCP 连接已建立。客户端(运行 Linux)已激活 keep-alive,并且它按要求工作。
现在的问题是:当我在服务器请求和客户端响应之间拔掉客户端的以太网电缆时,保持事件状态将停止工作。
我从 netstat 看到 Send-Q 已满。 send-q与TCP keep-alive有关吗?有没有办法清除这个队列?
问候, Frog 时光
最佳答案
TCP keep-alive 只是一种奇特的说法,“如果没有数据,则发送 0 字节数据包以保持连接处于事件状态”。由于您仍在发送 header ,而另一方仍必须确认它,因此在 IP 级别您仍在通信,但不是在套接字级别。
显然,unpluggint 会停止 IP 数据包和保持事件状态。另外,只要存在 send-Q,就没有必要发送空的 keep-alive 数据包,因此它们显然是相关的 - 相反。当队列为空时创建保活数据包。
关于c++ - TCP输出队列阻塞保活吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49873685/