Skip to content

Commit 2e29eef

Browse files
committed
Added connection timeout on per request basis.
1 parent d8d26ae commit 2e29eef

File tree

5 files changed

+23
-2
lines changed

5 files changed

+23
-2
lines changed

src/main/java/com/ning/http/client/Request.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,5 @@ public static interface EntityWriter {
230230

231231
public boolean isUseRawUrl();
232232

233+
public int getConnectTimeout();
233234
}

src/main/java/com/ning/http/client/RequestBuilderBase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ private static final class RequestImpl implements Request {
6666
private long rangeOffset = 0;
6767
public String charset;
6868
private boolean useRawUrl = false;
69+
private int connectTimeout = 0;
6970

7071
public RequestImpl(boolean useRawUrl) {
7172
this.useRawUrl = useRawUrl;
@@ -97,6 +98,7 @@ public RequestImpl(Request prototype) {
9798
this.rangeOffset = prototype.getRangeOffset();
9899
this.charset = prototype.getBodyEncoding();
99100
this.useRawUrl = prototype.isUseRawUrl();
101+
this.connectTimeout = prototype.getConnectTimeout();
100102
}
101103
}
102104

@@ -299,6 +301,10 @@ public String toString() {
299301
public boolean isUseRawUrl() {
300302
return useRawUrl;
301303
}
304+
305+
public int getConnectTimeout() {
306+
return connectTimeout;
307+
}
302308
}
303309

304310
private final Class<T> derived;

src/main/java/com/ning/http/client/providers/grizzly/GrizzlyAsyncHttpProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2291,6 +2291,9 @@ private Connection obtainConnection0(final String url,
22912291
String host = ((proxy != null) ? proxy.getHost() : uri.getHost());
22922292
int port = ((proxy != null) ? proxy.getPort() : uri.getPort());
22932293
int cTimeout = provider.clientConfig.getConnectionTimeoutInMs();
2294+
if (request.getConnectTimeout() > 0) {
2295+
cTimeout = request.getConnectTimeout();
2296+
}
22942297
FutureImpl<Connection> future = Futures.createSafeFuture();
22952298
CompletionHandler<Connection> ch = Futures.toCompletionHandler(future,
22962299
createConnectionCompletionHandler(request, requestFuture, null));

src/main/java/com/ning/http/client/providers/jdk/JDKAsyncHttpProvider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,11 @@ private void configure(URI uri, HttpURLConnection urlConnection, Request request
454454
int requestTimeout = (conf != null && conf.getRequestTimeoutInMs() != 0) ?
455455
conf.getRequestTimeoutInMs() : config.getRequestTimeoutInMs();
456456

457-
urlConnection.setConnectTimeout(config.getConnectionTimeoutInMs());
457+
int connectTimeout = config.getConnectionTimeoutInMs();
458+
if (request.getConnectTimeout() > 0) {
459+
connectTimeout = request.getConnectTimeout();
460+
}
461+
urlConnection.setConnectTimeout(connectTimeout);
458462

459463
if (requestTimeout != -1)
460464
urlConnection.setReadTimeout(requestTimeout);

src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,11 @@ private <T> ListenableFuture<T> doConnect(final Request request, final AsyncHand
947947

948948
ChannelFuture channelFuture;
949949
ClientBootstrap bootstrap = request.getUrl().startsWith(WEBSOCKET) ? webSocketBootstrap : (useSSl ? secureBootstrap : plainBootstrap);
950-
bootstrap.setOption("connectTimeoutMillis", config.getConnectionTimeoutInMs());
950+
int connectionTimeoutInMs = config.getConnectionTimeoutInMs();
951+
if (request.getConnectTimeout() > 0) {
952+
connectionTimeoutInMs = request.getConnectTimeout();
953+
}
954+
bootstrap.setOption("connectTimeoutMillis", connectionTimeoutInMs);
951955

952956
// Do no enable this with win.
953957
if (System.getProperty("os.name").toLowerCase().indexOf("win") == -1) {
@@ -977,6 +981,9 @@ private <T> ListenableFuture<T> doConnect(final Request request, final AsyncHand
977981

978982
if (directInvokation && !asyncConnect && request.getFile() == null) {
979983
int timeOut = config.getConnectionTimeoutInMs() > 0 ? config.getConnectionTimeoutInMs() : Integer.MAX_VALUE;
984+
if (request.getConnectTimeout() > 0) {
985+
timeOut = request.getConnectTimeout();
986+
}
980987
if (!channelFuture.awaitUninterruptibly(timeOut, TimeUnit.MILLISECONDS)) {
981988
if (acquiredConnection) {
982989
freeConnections.release();

0 commit comments

Comments
 (0)