From f0035c0e7077bc2d7a8aaf6516d96b0d2b1ba22d Mon Sep 17 00:00:00 2001 From: Brian Carlstrom Date: Fri, 3 Dec 2010 09:59:07 -0800 Subject: Set per request socket timeout on reused connections Even though SoTimeout, TcpNoDelay, and SoLinger can be specified per request in HttpParams, these values are only set on the underlying socket in the DefaultRequestDirector when ManagedClientConnection.open is called to create a new connection. On reused connection, no setting of Socket options was being done. There does not seem to be an easy way to fix this without changing one or more APIs but for the timeout case at least, we can use the fact that the ManagedClientConnection is an HttpConnection which has a setSocketTimeout method. Bug: 3241899 Change-Id: I080147b017b961502b3ba98d40841fea679491eb --- src/org/apache/http/impl/client/DefaultRequestDirector.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/org/apache/http/impl/client/DefaultRequestDirector.java b/src/org/apache/http/impl/client/DefaultRequestDirector.java index 511f8a0..6df6246 100644 --- a/src/org/apache/http/impl/client/DefaultRequestDirector.java +++ b/src/org/apache/http/impl/client/DefaultRequestDirector.java @@ -346,7 +346,13 @@ public class DefaultRequestDirector implements RequestDirector { // Reopen connection if needed if (!managedConn.isOpen()) { managedConn.open(route, context, params); - } + } + // BEGIN android-added + else { + // b/3241899 set the per request timeout parameter on reused connections + managedConn.setSocketTimeout(HttpConnectionParams.getSoTimeout(params)); + } + // END android-added try { establishRoute(route, context); -- cgit v1.1