You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2022/10/01 16:53:00 UTC

[jira] [Commented] (HTTPCLIENT-2236) Wrong exception on connect timeout when host is defined

    [ https://issues.apache.org/jira/browse/HTTPCLIENT-2236?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17611937#comment-17611937 ] 

ASF subversion and git services commented on HTTPCLIENT-2236:
-------------------------------------------------------------

Commit 9f463397770aea978123dfdb4d0d59557031e27e in httpcomponents-client's branch refs/heads/HTTPCLIENT-2236 from Oleg Kalnichevski
[ https://gitbox.apache.org/repos/asf?p=httpcomponents-client.git;h=9f4633977 ]

HTTPCLIENT-2236: MultihomeIOSessionRequester fails to enhance the cause exception in case of connect failure if the remoteAddress argument has been given


> 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-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org