Skip to content

Commit aa6a2d6

Browse files
author
Noor Dawod
committed
Split timeout into connection and response timeouts, for optimal control.
1 parent e66e8e6 commit aa6a2d6

File tree

1 file changed

+64
-17
lines changed

1 file changed

+64
-17
lines changed

library/src/main/java/com/loopj/android/http/AsyncHttpClient.java

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ public class AsyncHttpClient {
130130
public static final int DEFAULT_SOCKET_BUFFER_SIZE = 8192;
131131

132132
private int maxConnections = DEFAULT_MAX_CONNECTIONS;
133-
private int timeout = DEFAULT_SOCKET_TIMEOUT;
133+
private int connectTimeout = DEFAULT_SOCKET_TIMEOUT;
134+
private int responseTimeout = DEFAULT_SOCKET_TIMEOUT;
134135

135136
private final DefaultHttpClient httpClient;
136137
private final HttpContext httpContext;
@@ -222,12 +223,12 @@ public AsyncHttpClient(SchemeRegistry schemeRegistry) {
222223

223224
BasicHttpParams httpParams = new BasicHttpParams();
224225

225-
ConnManagerParams.setTimeout(httpParams, timeout);
226+
ConnManagerParams.setTimeout(httpParams, connectTimeout);
226227
ConnManagerParams.setMaxConnectionsPerRoute(httpParams, new ConnPerRouteBean(maxConnections));
227228
ConnManagerParams.setMaxTotalConnections(httpParams, DEFAULT_MAX_CONNECTIONS);
228229

229-
HttpConnectionParams.setSoTimeout(httpParams, timeout);
230-
HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
230+
HttpConnectionParams.setSoTimeout(httpParams, responseTimeout);
231+
HttpConnectionParams.setConnectionTimeout(httpParams, connectTimeout);
231232
HttpConnectionParams.setTcpNoDelay(httpParams, true);
232233
HttpConnectionParams.setSocketBufferSize(httpParams, DEFAULT_SOCKET_BUFFER_SIZE);
233234

@@ -255,7 +256,7 @@ public void process(HttpRequest request, HttpContext context) {
255256
header, clientHeaderMap.get(header),
256257
overwritten.getName(), overwritten.getValue())
257258
);
258-
259+
259260
//remove the overwritten header
260261
request.removeHeader(overwritten);
261262
}
@@ -457,27 +458,73 @@ public void setMaxConnections(int maxConnections) {
457458
}
458459

459460
/**
460-
* Returns current socket timeout limit (milliseconds), default is 10000 (10sec)
461+
* Returns current socket timeout limit (milliseconds). By default, this is
462+
* set to 10 seconds.
461463
*
462464
* @return Socket Timeout limit in milliseconds
465+
* @deprecated Use either {@link #getConnectTimeout()} or {@link #getResponseTimeout()}
463466
*/
464467
public int getTimeout() {
465-
return timeout;
468+
return connectTimeout;
466469
}
467470

468471
/**
469-
* Set the connection and socket timeout. By default, 10 seconds.
472+
* Set both the connection and socket timeouts. By default, both are set to
473+
* 10 seconds.
470474
*
471-
* @param timeout the connect/socket timeout in milliseconds, at least 1 second
475+
* @see If you need further refinement for either value, you can use {@link #setConnectTimeout(int)}
476+
* or {@link #setResponseTimeout(int)} methods.
477+
* @param value the connect/socket timeout in milliseconds, at least 1 second
472478
*/
473-
public void setTimeout(int timeout) {
474-
if (timeout < 1000)
475-
timeout = DEFAULT_SOCKET_TIMEOUT;
476-
this.timeout = timeout;
477-
final HttpParams httpParams = this.httpClient.getParams();
478-
ConnManagerParams.setTimeout(httpParams, this.timeout);
479-
HttpConnectionParams.setSoTimeout(httpParams, this.timeout);
480-
HttpConnectionParams.setConnectionTimeout(httpParams, this.timeout);
479+
public void setTimeout(int value) {
480+
value = value < 1000 ? DEFAULT_SOCKET_TIMEOUT : value;
481+
setConnectTimeout(value);
482+
setResponseTimeout(value);
483+
}
484+
485+
/**
486+
* Returns current connection timeout limit (milliseconds). By default, this
487+
* is set to 10 seconds.
488+
*
489+
* @return Connection timeout limit in milliseconds
490+
*/
491+
public int getConnectTimeout() {
492+
return connectTimeout;
493+
}
494+
495+
/**
496+
* Set connection timeout limit (milliseconds). By default, this is set to
497+
* 10 seconds.
498+
*
499+
* @param value Connection timeout in milliseconds, minimal value is 1000 (1 second).
500+
*/
501+
public void setConnectTimeout(int value) {
502+
connectTimeout = value < 1000 ? DEFAULT_SOCKET_TIMEOUT : value;
503+
final HttpParams httpParams = httpClient.getParams();
504+
ConnManagerParams.setTimeout(httpParams, connectTimeout);
505+
HttpConnectionParams.setConnectionTimeout(httpParams, connectTimeout);
506+
}
507+
508+
/**
509+
* Returns current connection timeout limit (milliseconds). By default, this
510+
* is set to 10 seconds.
511+
*
512+
* @return Connection timeout limit in milliseconds
513+
*/
514+
public int getResponseTimeout() {
515+
return responseTimeout;
516+
}
517+
518+
/**
519+
* Set connection timeout limit (milliseconds). By default, this is set to
520+
* 10 seconds.
521+
*
522+
* @param value Connection timeout in milliseconds, minimal value is 1000 (1 second).
523+
*/
524+
public void setResponseTimeout(int value) {
525+
responseTimeout = value < 1000 ? DEFAULT_SOCKET_TIMEOUT : value;
526+
final HttpParams httpParams = httpClient.getParams();
527+
HttpConnectionParams.setSoTimeout(httpParams, responseTimeout);
481528
}
482529

483530
/**

0 commit comments

Comments
 (0)