[ https://issues.apache.org/jira/browse/HTTPCLIENT-2236?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17612263#comment-17612263 ]
Oleg Kalnichevski commented on HTTPCLIENT-2236: ----------------------------------------------- [~lando] Two handlers are not exactly the same. I personally do not like the idea of code re-use at all cost. If common code is relatively small, requires parameterization for conditional execution and can be re-used once or twice, it is clearly not worth it. Oleg > Wrong exception on connect timeout when host is defined > ------------------------------------------------------- > > Key: HTTPCLIENT-2236 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2236 > Project: HttpComponents HttpClient > Issue Type: Bug > Components: HttpClient (async) > Affects Versions: 5.1.3 > Reporter: Lubos Kolarik > Priority: Minor > > Hi, > it seems that when connection timeout occurs on http call, resulting > exception is different depending on whether {{HttpHost}} is passed to execute > method or not. > I am using > {code:java} > public final <T> Future<T> execute( > final HttpHost target, > final AsyncRequestProducer requestProducer, > final AsyncResponseConsumer<T> responseConsumer, > final HandlerFactory<AsyncPushConsumer> pushHandlerFactory, > final HttpContext context, > final FutureCallback<T> callback) {code} > method to execute the request. But the resulting exception depends on whether > `target` is null or not. > When target is null, and connection timeout occurs, then the result is > {{org.apache.hc.client5.http.ConnectTimeoutException}} (correct), but when I > provide the target instance myself, then the result is > {{{}java.net.SocketTimeoutException{}}}. > I think the problem is within > {{org.apache.hc.client5.http.impl.nio.MultihomeIOSessionRequester#connect}} > > [Here|https://github.com/apache/httpcomponents-client/blob/f3b96ff82aaa4c76e88ba796c3303cd43e89ccf6/httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/MultihomeIOSessionRequester.java#L69] > when the target is provided, the {{remoteAddress}} is not null, and the > `connectionInitiator.connect` is called directly. When SocketTimeoutException > is throws here, it is passed directly to the callback > But when the address is not provided, then {{connectionInitiator.connect}} is > called > [later|https://github.com/apache/httpcomponents-client/blob/f3b96ff82aaa4c76e88ba796c3303cd43e89ccf6/httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/MultihomeIOSessionRequester.java#L107] > with custom callback. This custom callback also handles the > {{SocketTimeoutException}} and rethrows {{ConnectTimeoutException}} > > I would expect that for both cases the exception will be the same. Or am I > doing something wrong here. > Thanks for info -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org