You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Lubos Kolarik (Jira)" <ji...@apache.org> on 2022/10/03 06:57:00 UTC

[jira] [Comment Edited] (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=17612196#comment-17612196 ] 

Lubos Kolarik edited comment on HTTPCLIENT-2236 at 10/3/22 6:56 AM:
--------------------------------------------------------------------

Hello. It works for my test. Thanks for quick fix(y)

Personally I would try to use the same handler code for both connectionInitiator.connect calls to make sure the handling of both cases is the same even in future. But there may be some wanted differences I am not aware of...


was (Author: JIRAUSER296328):
Hello. It works for my test. Thanks for quick fix(y)

> 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