首页 > 解决方案 > 在 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 服务器之间的单个路由器。

标签: androidsocketstcpkeep-alive

解决方案


推荐阅读