[jira] [Commented] (HTTPCLIENT-2013) Connect timeout throws HttpHostConnectException (ConnectException) instead of ConnectTimeoutException (IOException)
[ https://issues.apache.org/jira/browse/HTTPCLIENT-2013?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16915095#comment-16915095 ] ASF subversion and git services commented on HTTPCLIENT-2013: - Commit d5e1392840fcbd9ff9d9c5b19d8ed9da2883c224 in httpcomponents-client's branch refs/heads/development from Oleg Kalnichevski [ https://gitbox.apache.org/repos/asf?p=httpcomponents-client.git;h=d5e1392 ] HTTPCLIENT-2013: revised handling of connect exceptions; improved consistency in behavior of the classic and async clients; ConnectTimeoutException now extends SocketTimeoutException > Connect timeout throws HttpHostConnectException (ConnectException) instead of > ConnectTimeoutException (IOException) > --- > > Key: HTTPCLIENT-2013 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2013 > Project: HttpComponents HttpClient > Issue Type: Improvement > Components: HttpClient (classic) >Affects Versions: 4.5.9 > Environment: Linux > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) >Reporter: Chanseok Oh >Priority: Minor > > It is obvious from the code in DefaultHttpClientConnectionOperator that it is > supposed to throw ConnectTimeoutException in the case of connection timeout: > {code:java} > } catch (final ConnectException ex) { > if (last) { > final String msg = ex.getMessage(); > throw "Connection timed out".equals(msg) > ? new ConnectTimeoutException(ex, host, addresses) > : new HttpHostConnectException(ex, host, addresses); > } > {code} > Recently, we've upgraded Apache HttpClient (indirectly through Google HTTP > Client), and our production code handling ConnectionException got broken due > to DefaultHttpClientConnectionOperator throwing HttpHostConnectException that > extends ConnectionException. (OTOH, ConnectTimeoutException is an IOException > and not a ConnectionException.) > Java version: > {code} > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) > {code} > Example code to reproduce: > {code:java} > public static void main(String[] args) throws IOException { >// example.com is reserved by the DNS standard and will always trigger > timeout >try (CloseableHttpClient client = HttpClients.createDefault(); >CloseableHttpResponse response = client.execute(new > HttpGet("https://example.com:81;))) {} > } > {code} > It currently throws the other exception HttpHostConnectException rather than > the supposed ConnectTimeoutException. > {code} > Exception in thread "main" org.apache.http.conn.HttpHostConnectException: > Connect to example.com:81 [example.com/93.184.216.34, > example.com/2606:2800:220:1:248:1893:25c8:1946] failed: Connection timed out > (Connection timed out) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:138) > at > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) > at > org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:357) > at > org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218) > at > org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194) > at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) > at > org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) > at > org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) > at com.example.ApacheHttpClient2.main(ApacheHttpClient2.java:13) > Caused by: java.net.ConnectException: Connection timed out (Connection timed > out) > at java.net.PlainSocketImpl.socketConnect(Native Method) > at > java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) > at > java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) > at > java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) > at java.net.Socket.connect(Socket.java:589) > at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666) > at >
Re: Stale release branches
On Fri, Aug 23, 2019 at 8:57 AM Oleg Kalnichevski wrote: > On Fri, 2019-08-23 at 08:26 -0400, Gary Gregory wrote: > > On Fri, Aug 23, 2019 at 7:40 AM Oleg Kalnichevski > > wrote: > > > > > Folks > > > > > > There is a number of release branches that we will never ever > > > release > > > from any more. They cause no harm but sometimes get in the way. > > > > > > I would like to delete them unless someone objects very loudly. > > > > > > https://github.com/apache/httpcomponents-core/branches > > > https://github.com/apache/httpcomponents-client/branches > > > > > > I think it is fair to make this announcement in the release notes and > > mailing lists in the next releases for core and client and list > > explicitly > > which branches will be/are deleted. > > > > What would be the point of doing that? We are not going to deleting > release tags. Release tags will always stay there. Branches can always > be created from the last release tag should this ever become necessary. > Yep, you are correct, we still have the tags. > > Oleg > > > > - > To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org > For additional commands, e-mail: dev-h...@hc.apache.org > >
[jira] [Comment Edited] (HTTPCLIENT-2013) Connect timeout throws HttpHostConnectException (ConnectException) instead of ConnectTimeoutException (IOException)
[ https://issues.apache.org/jira/browse/HTTPCLIENT-2013?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16914970#comment-16914970 ] Chanseok Oh edited comment on HTTPCLIENT-2013 at 8/24/19 2:26 PM: -- Great. Keep up the good work. Thanks! was (Author: francium25): Great. Keep up with the good work. > Connect timeout throws HttpHostConnectException (ConnectException) instead of > ConnectTimeoutException (IOException) > --- > > Key: HTTPCLIENT-2013 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2013 > Project: HttpComponents HttpClient > Issue Type: Improvement > Components: HttpClient (classic) >Affects Versions: 4.5.9 > Environment: Linux > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) >Reporter: Chanseok Oh >Priority: Minor > > It is obvious from the code in DefaultHttpClientConnectionOperator that it is > supposed to throw ConnectTimeoutException in the case of connection timeout: > {code:java} > } catch (final ConnectException ex) { > if (last) { > final String msg = ex.getMessage(); > throw "Connection timed out".equals(msg) > ? new ConnectTimeoutException(ex, host, addresses) > : new HttpHostConnectException(ex, host, addresses); > } > {code} > Recently, we've upgraded Apache HttpClient (indirectly through Google HTTP > Client), and our production code handling ConnectionException got broken due > to DefaultHttpClientConnectionOperator throwing HttpHostConnectException that > extends ConnectionException. (OTOH, ConnectTimeoutException is an IOException > and not a ConnectionException.) > Java version: > {code} > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) > {code} > Example code to reproduce: > {code:java} > public static void main(String[] args) throws IOException { >// example.com is reserved by the DNS standard and will always trigger > timeout >try (CloseableHttpClient client = HttpClients.createDefault(); >CloseableHttpResponse response = client.execute(new > HttpGet("https://example.com:81;))) {} > } > {code} > It currently throws the other exception HttpHostConnectException rather than > the supposed ConnectTimeoutException. > {code} > Exception in thread "main" org.apache.http.conn.HttpHostConnectException: > Connect to example.com:81 [example.com/93.184.216.34, > example.com/2606:2800:220:1:248:1893:25c8:1946] failed: Connection timed out > (Connection timed out) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:138) > at > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) > at > org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:357) > at > org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218) > at > org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194) > at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) > at > org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) > at > org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) > at com.example.ApacheHttpClient2.main(ApacheHttpClient2.java:13) > Caused by: java.net.ConnectException: Connection timed out (Connection timed > out) > at java.net.PlainSocketImpl.socketConnect(Native Method) > at > java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) > at > java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) > at > java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) > at java.net.Socket.connect(Socket.java:589) > at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666) > at > org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:251) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:118) > ... 10 more > {code} > > -- This message was sent by Atlassian Jira (v8.3.2#803003)
[jira] [Commented] (HTTPCLIENT-2013) Connect timeout throws HttpHostConnectException (ConnectException) instead of ConnectTimeoutException (IOException)
[ https://issues.apache.org/jira/browse/HTTPCLIENT-2013?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16914970#comment-16914970 ] Chanseok Oh commented on HTTPCLIENT-2013: - Great. Keep up with the good work. > Connect timeout throws HttpHostConnectException (ConnectException) instead of > ConnectTimeoutException (IOException) > --- > > Key: HTTPCLIENT-2013 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2013 > Project: HttpComponents HttpClient > Issue Type: Improvement > Components: HttpClient (classic) >Affects Versions: 4.5.9 > Environment: Linux > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) >Reporter: Chanseok Oh >Priority: Minor > > It is obvious from the code in DefaultHttpClientConnectionOperator that it is > supposed to throw ConnectTimeoutException in the case of connection timeout: > {code:java} > } catch (final ConnectException ex) { > if (last) { > final String msg = ex.getMessage(); > throw "Connection timed out".equals(msg) > ? new ConnectTimeoutException(ex, host, addresses) > : new HttpHostConnectException(ex, host, addresses); > } > {code} > Recently, we've upgraded Apache HttpClient (indirectly through Google HTTP > Client), and our production code handling ConnectionException got broken due > to DefaultHttpClientConnectionOperator throwing HttpHostConnectException that > extends ConnectionException. (OTOH, ConnectTimeoutException is an IOException > and not a ConnectionException.) > Java version: > {code} > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) > {code} > Example code to reproduce: > {code:java} > public static void main(String[] args) throws IOException { >// example.com is reserved by the DNS standard and will always trigger > timeout >try (CloseableHttpClient client = HttpClients.createDefault(); >CloseableHttpResponse response = client.execute(new > HttpGet("https://example.com:81;))) {} > } > {code} > It currently throws the other exception HttpHostConnectException rather than > the supposed ConnectTimeoutException. > {code} > Exception in thread "main" org.apache.http.conn.HttpHostConnectException: > Connect to example.com:81 [example.com/93.184.216.34, > example.com/2606:2800:220:1:248:1893:25c8:1946] failed: Connection timed out > (Connection timed out) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:138) > at > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) > at > org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:357) > at > org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218) > at > org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194) > at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) > at > org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) > at > org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) > at com.example.ApacheHttpClient2.main(ApacheHttpClient2.java:13) > Caused by: java.net.ConnectException: Connection timed out (Connection timed > out) > at java.net.PlainSocketImpl.socketConnect(Native Method) > at > java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) > at > java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) > at > java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) > at java.net.Socket.connect(Socket.java:589) > at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666) > at > org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:251) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:118) > ... 10 more > {code} > > -- This message was sent by Atlassian Jira (v8.3.2#803003) - To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional
[jira] [Resolved] (HTTPCLIENT-2013) Connect timeout throws HttpHostConnectException (ConnectException) instead of ConnectTimeoutException (IOException)
[ https://issues.apache.org/jira/browse/HTTPCLIENT-2013?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Oleg Kalnichevski resolved HTTPCLIENT-2013. --- Fix Version/s: (was: 5.0 Beta6) Resolution: Invalid > Connect timeout throws HttpHostConnectException (ConnectException) instead of > ConnectTimeoutException (IOException) > --- > > Key: HTTPCLIENT-2013 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2013 > Project: HttpComponents HttpClient > Issue Type: Improvement > Components: HttpClient (classic) >Affects Versions: 4.5.9 > Environment: Linux > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) >Reporter: Chanseok Oh >Priority: Minor > > It is obvious from the code in DefaultHttpClientConnectionOperator that it is > supposed to throw ConnectTimeoutException in the case of connection timeout: > {code:java} > } catch (final ConnectException ex) { > if (last) { > final String msg = ex.getMessage(); > throw "Connection timed out".equals(msg) > ? new ConnectTimeoutException(ex, host, addresses) > : new HttpHostConnectException(ex, host, addresses); > } > {code} > Recently, we've upgraded Apache HttpClient (indirectly through Google HTTP > Client), and our production code handling ConnectionException got broken due > to DefaultHttpClientConnectionOperator throwing HttpHostConnectException that > extends ConnectionException. (OTOH, ConnectTimeoutException is an IOException > and not a ConnectionException.) > Java version: > {code} > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) > {code} > Example code to reproduce: > {code:java} > public static void main(String[] args) throws IOException { >// example.com is reserved by the DNS standard and will always trigger > timeout >try (CloseableHttpClient client = HttpClients.createDefault(); >CloseableHttpResponse response = client.execute(new > HttpGet("https://example.com:81;))) {} > } > {code} > It currently throws the other exception HttpHostConnectException rather than > the supposed ConnectTimeoutException. > {code} > Exception in thread "main" org.apache.http.conn.HttpHostConnectException: > Connect to example.com:81 [example.com/93.184.216.34, > example.com/2606:2800:220:1:248:1893:25c8:1946] failed: Connection timed out > (Connection timed out) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:138) > at > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) > at > org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:357) > at > org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218) > at > org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194) > at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) > at > org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) > at > org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) > at com.example.ApacheHttpClient2.main(ApacheHttpClient2.java:13) > Caused by: java.net.ConnectException: Connection timed out (Connection timed > out) > at java.net.PlainSocketImpl.socketConnect(Native Method) > at > java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) > at > java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) > at > java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) > at java.net.Socket.connect(Socket.java:589) > at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666) > at > org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:251) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:118) > ... 10 more > {code} > > -- This message was sent by Atlassian Jira (v8.3.2#803003) - To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For
[jira] [Commented] (HTTPCLIENT-2013) Connect timeout throws HttpHostConnectException (ConnectException) instead of ConnectTimeoutException (IOException)
[ https://issues.apache.org/jira/browse/HTTPCLIENT-2013?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16914957#comment-16914957 ] Oleg Kalnichevski commented on HTTPCLIENT-2013: --- I revisited connect exception handling code in master and cleaned up things making sure that all classic and async client implementations handle connect failures the same way. [https://github.com/apache/httpcomponents-client/commit/e0c1c140d574872ba20574edd6eb941cc072d761] At the same time I found that the actual logic in 4.5 and 5.0 was reasonable and decided to not make any major changes (other than making {{ConnectTimeoutException}} extend {{SocketTimeoutException}} and eliminating unnecessary exception chaining). Most of the time JREs do the right thing and throw {{SocketTimeoutException}}. If for whatever reason some JREs decide to throw {{ConnectException}} instead, HttpClient will make an effort to correct it but it is still just guess-work based on exception message text. [~francium25] The only way of fixing the problem properly is to fix it as the source. So, I am sure you will be right on track reporting this issue to OpenJDK. Oleg — java version "1.7.0_75" Java(TM) SE Runtime Environment (build 1.7.0_75-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode) {noformat} Exception in thread "main" org.apache.hc.client5.http.ConnectTimeoutException: Connect to http://httpbin.org:80 [httpbin.org/52.22.188.80, httpbin.org/3.223.234.9] failed: connect timed out at org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:160) at org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:409) at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:164) at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:174) at org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:135) at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57) at org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:165) at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57) at org.apache.hc.client5.http.impl.classic.RetryExec.execute(RetryExec.java:88) at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57) at org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:116) at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57) at org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:128) at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) at org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:178) at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:77) at org.apache.hc.client5.http.examples.QuickStart.main(QuickStart.java:55) Caused by: java.net.SocketTimeoutException: connect timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.hc.client5.http.socket.PlainConnectionSocketFactory$1.run(PlainConnectionSocketFactory.java:87) at java.security.AccessController.doPrivileged(Native Method) at org.apache.hc.client5.http.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:84) at org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:152) ... 20 more {noformat} java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode) {noformat} Exception in
[jira] [Commented] (HTTPCLIENT-2013) Connect timeout throws HttpHostConnectException (ConnectException) instead of ConnectTimeoutException (IOException)
[ https://issues.apache.org/jira/browse/HTTPCLIENT-2013?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16914952#comment-16914952 ] ASF subversion and git services commented on HTTPCLIENT-2013: - Commit e0c1c140d574872ba20574edd6eb941cc072d761 in httpcomponents-client's branch refs/heads/development from Oleg Kalnichevski [ https://gitbox.apache.org/repos/asf?p=httpcomponents-client.git;h=e0c1c14 ] HTTPCLIENT-2013: revised handling of connect exceptions; improved consistency in behavior of the classic and async clients; ConnectTimeoutException now extends SocketTimeoutException > Connect timeout throws HttpHostConnectException (ConnectException) instead of > ConnectTimeoutException (IOException) > --- > > Key: HTTPCLIENT-2013 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2013 > Project: HttpComponents HttpClient > Issue Type: Improvement > Components: HttpClient (classic) >Affects Versions: 4.5.9 > Environment: Linux > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) >Reporter: Chanseok Oh >Priority: Minor > Fix For: 5.0 Beta6 > > > It is obvious from the code in DefaultHttpClientConnectionOperator that it is > supposed to throw ConnectTimeoutException in the case of connection timeout: > {code:java} > } catch (final ConnectException ex) { > if (last) { > final String msg = ex.getMessage(); > throw "Connection timed out".equals(msg) > ? new ConnectTimeoutException(ex, host, addresses) > : new HttpHostConnectException(ex, host, addresses); > } > {code} > Recently, we've upgraded Apache HttpClient (indirectly through Google HTTP > Client), and our production code handling ConnectionException got broken due > to DefaultHttpClientConnectionOperator throwing HttpHostConnectException that > extends ConnectionException. (OTOH, ConnectTimeoutException is an IOException > and not a ConnectionException.) > Java version: > {code} > openjdk version "1.8.0_222" > OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10) > OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) > {code} > Example code to reproduce: > {code:java} > public static void main(String[] args) throws IOException { >// example.com is reserved by the DNS standard and will always trigger > timeout >try (CloseableHttpClient client = HttpClients.createDefault(); >CloseableHttpResponse response = client.execute(new > HttpGet("https://example.com:81;))) {} > } > {code} > It currently throws the other exception HttpHostConnectException rather than > the supposed ConnectTimeoutException. > {code} > Exception in thread "main" org.apache.http.conn.HttpHostConnectException: > Connect to example.com:81 [example.com/93.184.216.34, > example.com/2606:2800:220:1:248:1893:25c8:1946] failed: Connection timed out > (Connection timed out) > at > org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:138) > at > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) > at > org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:357) > at > org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218) > at > org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194) > at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) > at > org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) > at > org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) > at > org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) > at com.example.ApacheHttpClient2.main(ApacheHttpClient2.java:13) > Caused by: java.net.ConnectException: Connection timed out (Connection timed > out) > at java.net.PlainSocketImpl.socketConnect(Native Method) > at > java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) > at > java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) > at > java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) > at java.net.Socket.connect(Socket.java:589) > at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666) > at >