[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2102?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Matthias Keller updated HTTPCLIENT-2102:
----------------------------------------
    Attachment: image-2020-07-30-18-33-01-762.png

> Socks Proxy connection ignores sotimeout (thus never times out)
> ---------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2102
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2102
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (classic)
>    Affects Versions: 4.5.12
>            Reporter: Matthias Keller
>            Priority: Major
>         Attachments: image-2020-07-30-18-33-01-762.png
>
>
> This bug report is related to HTTPCLIENT-1478 and HTTPCLIENT-2091 though a 
> different bug again.
>  We've discovered that for socks proxy connections, there is no SO-Timeout 
> defined when opening the connection.
>  Thus if the proxy accepts the request but never responds, the thread is 
> blocked infititely. This does not happen for http proxies or without proxy; 
> thus is a socks-specific bug.
> The code flow is as follows:
>  # We have all the official timeouts set:
> {code:java}
> requestConfigBuilder
>    .setConnectTimeout(timeoutInMillis)
>    .setSocketTimeout(timeoutInMillis)
>    .setConnectionRequestTimeout(timeoutInMillis) {code}
>  # {{org.apache.http.impl.conn.DefaultHttpClientConnectionOperator#connect}} 
> opens the connection
>  # For the socket config, it calls 
> {{org.apache.http.impl.conn.PoolingHttpClientConnectionManager#resolveSocketConfig}}
>  to get the parameters. However since we don't override the default 
> connection manager, its socket config is the {{DEFAULT}} config, having a 
> timeout=0
>  # This infinite timeout is set via {{java.net.Socket#setSoTimeout}} on the 
> socket.
> This can easily be reproduced by configuring a socks proxy (thus target URI 
> must be https and a proxy configured) and using a localhost port as proxy 
> where a netcat listens. By just letting it sit there, receive the request but 
> never respond, the calling thread is blocked infinitely.
> The problem here is, that the connectTimeout is set correctly, but the read 
> timeout (so timeout) is zero (infinite).
> The bug can be circumvented by specifying a custom 
> PoolingHttpClientConnectionManager and setting a defaultSocketConfig on it. 
> However, httpclient should honor the requestconfig parameters here.
> For reference, here's a stacktrace exhibiting this problem on the blocking 
> thread:
> !image-2020-07-30-18-33-01-762.png|id=cp-img!



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to