android - 在 Android 应用程序的 TCP 套接字上设置 TCP keep_alive 属性时出现“连接超时”错误
问题描述
我正在使用以下选项在连接到运行 Linux 的服务器的 Android 上运行的套接字上设置TCP keep_alive属性。
int idleTimeout = 3;
setsockopt(socketDescriptor, SOL_TCP, TCP_KEEPIDLE, &idleTimeout, sizeof(int))
int interval = 3;
setsockopt(socketDescriptor, SOL_TCP, TCP_KEEPINTVL, &interval, sizeof(int))
int unackPacketCount = 5;
setsockopt(socketDescriptor, SOL_TCP, TCP_KEEPCNT, &unackPacketCount, sizeof(int))
Linux 服务器也以同样的方式打开了保持活动设置。
问题:
一切都按预期工作。但是,如果我让我的 Android 设备连接 6 到 7 个小时,我会收到连接超时错误。这可能在 10 小时或 3-4 小时后发生。它真的很随机。
这是预期的,因为我的客户端是在 Android 上运行的应用程序吗?(因为,当我在 Linux 上使用相同的设置运行客户端时,我没有看到问题发生)我的 Android 套接字不能在不超时的情况下永远保持连接吗?
环境:
- 在 Pixel XL 上运行 Android 10
- 我的 Android 手机在测试期间始终连接到充电器
- 它是我的 Android 设备和 Linux 服务器之间的单个路由器。
解决方案
推荐阅读
- data-visualization - Kibana :: 如何制作是/否垂直条形图?(水平人口金字塔)
- javascript - React/Redux/CSS - 模态布局
- javascript - 尝试更新 div InnerHtml 但没有任何反应
- components - Angular 6 组件作为应用程序组件中的属性
- database - Mongodb 4 oplog中的t是什么意思?
- windows - 如何识别新机器何时连接到远程客户端
- r - 具有多个条件的重复过滤,没有循环
- drools - 平台无关规则或工作流引擎
- java - 如何在其中单击文本为“要拨打的电话”的元素
通过 Selenium 和 Java 下拉 - php - 使用 str_replace 匹配整个单词/不区分大小写