在我的 Android 代码(使用 Apache HTTP 客户端)上,我已经设置了以下参数:
HttpConnectionParams.setConnectionTimeout(params, 30 * SECOND_IN_MILLIS);
HttpConnectionParams.setSoTimeout(params, 30 * SECOND_IN_MILLIS);
我正在连接到 HTTPS 网络服务。在慢速网络上,我得到一个ConnectionTimeoutException
预期的 30 秒后(然后我重试);但是有“很少”的情况(没有我可以观察到的模式),我得到以下任何一种:
javax.net.ssl.SSLException:读取错误:ssl=0xe71160:系统调用期间 I/O 错误,连接超时 javax.net.ssl.SSLException:写入错误:ssl=0xe71160:系统调用期间 I/O 错误,Broken管道
我从 SO 那里得到了这段代码,它仍在测试中:
registry.register(new Scheme("https",
SSLCertificateSocketFactory.getHttpSocketFactory(30 * SECOND_IN_MILLIS, null), 443));
我可以理解连接建立超时和套接字超时 - 我的问题是我们真的需要 SSL 的第三次超时吗?目的与 SO_TIMEOUT 有何不同?
PS:这些异常似乎在读取/写入数据时出现 - 这应该导致数据丢失 - 但我也无法观察到。