首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何关闭TCP Keepalive?

如何关闭TCP Keepalive?
EN

Stack Overflow用户
提问于 2011-03-10 09:51:51
回答 3查看 5.8K关注 0票数 2

我有一个java应用程序充当服务器,一个android手机充当客户端。它们通过TCP套接字进行通信。

我经常让客户端休眠,当它的缓冲区填满时,我希望wifi无线电能够进入休眠状态。问题是客户没有在睡觉。我注意到wireshark说我的服务器大约每半秒发送一次TCP KeepAlive数据包,所以wifi无法休眠。我已经在服务器和客户端上尝试了以下操作。

代码语言:javascript
复制
connectionSocket.setKeepAlive(false);

但这似乎改变不了什么。我正在使用wireshark分析流量。这是wireshark的屏幕截图...黑线表示我的客户端处于休眠状态,它的接收缓冲区已满。是否可以阻止服务器发送keepAlive数据包?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2011-03-10 10:57:08

TCP连接在关闭之前保持打开状态,这里的keep alive机制是用来检测连接故障的。

请查看此链接:Does a TCP socket connection have a "keep alive"?

票数 1
EN

Stack Overflow用户

发布于 2021-06-24 16:48:47

服务器和客户端之间的中间设备也将启动TCP保持活动,例如防火墙、网守。客户端似乎无法阻止TCP keep-alive。

票数 0
EN

Stack Overflow用户

发布于 2021-06-28 08:30:31

事实上,TCP保持活动行为取决于TCP堆栈的实现。话虽如此,我们应该遵循RFC标准。即使TCP实现支持keep-alive,它也应该默认不使用它,除非连接上有请求。

请参阅RFC 1122 section 4.2.3.6 "TCP Keep-Alives"

引用:

代码语言:javascript
复制
Implementors MAY include "keep-alives" in their TCP
implementations, although this practice is not universally
accepted. If keep-alives are included, the application MUST
be able to turn them on or off for each TCP connection, and
they MUST default to off.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5254545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档