Android 间歇性 SSL 套接字读取超时
Android intermittent SSL Socket read timed out
我正在构建一个 android 应用程序来调用 HTTP/REST api。
我已经为测试自行签署了证书并将其添加到我的手机信任库中。
我 运行 遇到了一个非常奇怪的问题,我将收到以下异常:
java.net.SocketTimeoutException: Read timed out
at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:705)
...
我完全不知道这是怎么发生的,为什么会发生。
重要提示:
- 这是随机发生的,在多次请求后恢复,但有时会消失一两天。
- 我无法可靠地重现该问题。
- 我已经调整了超时设置,但没有结果。
- 问题的存在时间超过了应用程序的生命周期。重新启动应用程序没有任何效果,但它似乎会在 5 分钟内自行解决。
- 如果我使用的是 cookie 存储,删除它似乎可以暂时解决问题。如果我不使用 cookie 存储,则需要创建一个新的 HttpClient 实例(因为 cookie 随 HttpClient 实例暂时保留)
- 这不是 DNS 问题,因为我可以解析端点(因为我有另一个使用相同端点和相同 crt 的应用程序)。
- 我正在为 android 使用 AsyncHttp 库,但问题仍然发生在使用该库之外。
- 我已经用另一个版本的 android 尝试了另一个设备(没有运气)。
我尝试过的有趣的事情:
- 我创建了一个新的 AsyncHttp 实例,发出了请求(没有设置 cookiestore)并成功收到了响应。然后应用程序使用 cookie 存储创建另一个 AsyncHttp 实例,问题仍然存在。即使在应用程序生命周期之外,第一个(非 cookie 化的)请求也会起作用,但第二个则不会。
- 我厌倦了关闭 tcp_timestamp(暂时通过 proc 中的文件)。没变化。
如果有人对类似问题有任何想法或经验,请告诉我。
这实际上是我的服务器代码中与会话相关的错误。
我正在构建一个 android 应用程序来调用 HTTP/REST api。 我已经为测试自行签署了证书并将其添加到我的手机信任库中。
我 运行 遇到了一个非常奇怪的问题,我将收到以下异常:
java.net.SocketTimeoutException: Read timed out
at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:705)
...
我完全不知道这是怎么发生的,为什么会发生。 重要提示:
- 这是随机发生的,在多次请求后恢复,但有时会消失一两天。
- 我无法可靠地重现该问题。
- 我已经调整了超时设置,但没有结果。
- 问题的存在时间超过了应用程序的生命周期。重新启动应用程序没有任何效果,但它似乎会在 5 分钟内自行解决。
- 如果我使用的是 cookie 存储,删除它似乎可以暂时解决问题。如果我不使用 cookie 存储,则需要创建一个新的 HttpClient 实例(因为 cookie 随 HttpClient 实例暂时保留)
- 这不是 DNS 问题,因为我可以解析端点(因为我有另一个使用相同端点和相同 crt 的应用程序)。
- 我正在为 android 使用 AsyncHttp 库,但问题仍然发生在使用该库之外。
- 我已经用另一个版本的 android 尝试了另一个设备(没有运气)。
我尝试过的有趣的事情:
- 我创建了一个新的 AsyncHttp 实例,发出了请求(没有设置 cookiestore)并成功收到了响应。然后应用程序使用 cookie 存储创建另一个 AsyncHttp 实例,问题仍然存在。即使在应用程序生命周期之外,第一个(非 cookie 化的)请求也会起作用,但第二个则不会。
- 我厌倦了关闭 tcp_timestamp(暂时通过 proc 中的文件)。没变化。
如果有人对类似问题有任何想法或经验,请告诉我。
这实际上是我的服务器代码中与会话相关的错误。