【发布时间】:2012-03-01 11:12:30
【问题描述】:
如何使用 ThreadSafeClientConnectionManaget 为 SSL 套接字设置阻塞读/写超时?我发现在读取或写入 SSL 套接字时失去网络连接会导致 Android OS 2.2 和 2.3 设备上的 15 分钟超时。
我在 HttpClient 上设置了以下超时:
mParams = new BasicHttpParams();
HttpProtocolParams.setVersion(mParams, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(mParams, "UTF-8");
HttpProtocolParams.setUserAgent(mParams, USER_AGENT);
HttpConnectionParams.setConnectionTimeout(mParams, TIME_OUT);
HttpConnectionParams.setSoTimeout(mParams, TIME_OUT);
ConnManagerParams.setTimeout(mParams, TIME_OUT);
final SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme(HTTP_SCHEME, PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme(HTTPS_SCHEME, SSLSocketFactory.getSocketFactory(), 443));
final ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(mParams, registry);
mClient = new DefaultHttpClient(manager, mParams);
然后我使用客户端对文件实体执行 http put 请求。如果我在上传过程中打开飞行模式,等待 15-30 秒,然后关闭飞行模式,套接字将卡在读取或写入状态,并且不会超时 15 分钟。
【问题讨论】: