You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (JIRA)" <ji...@apache.org> on 2010/05/11 20:51:41 UTC
[jira] Resolved: (HTTPCLIENT-938) Connection Timeout doesn't work
where there's an UnknownHostException
[ https://issues.apache.org/jira/browse/HTTPCLIENT-938?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Oleg Kalnichevski resolved HTTPCLIENT-938.
------------------------------------------
Resolution: Invalid
Oz,
This is a general limitation of the java platform we can do little about.
In HttpClient 4.0 one can replace the standard DNS resolution code with a custom routine by using a custom ClientConnectionOperator.
Oleg
> Connection Timeout doesn't work where there's an UnknownHostException
> ---------------------------------------------------------------------
>
> Key: HTTPCLIENT-938
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-938
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient, HttpConn
> Affects Versions: 3.1 Final
> Environment: Linux OS
> Reporter: Oz Levanon
>
> When trying to connect to an unresolvable host (using the host name, not the IP), it seems that none of the timeouts has any effect.
> On one of my machines the UnknownHostConnection is only thrown after 20 seconds, even though my timeouts are set to 1 second.
> Please note that the duration of the timeout changes between computers. On my Windows XP machine it takes only 500ms to throw the exception, but on a Linux machine (probably with a more problematic DNS) it takes 20 seconds.
> This issue may be somehow related to issue 478 (https://issues.apache.org/jira/browse/HTTPCLIENT-478), but I couldn't find any help in any of the solutions there.
> I suspect the problem occurs when Java's InetSocketAddress constructor calls InetAddress.getByName(String) after DefaultProtocolSocketFactory.createSocket tries to create a new socket.
> Example code:
> --------------------
> import org.apache.commons.httpclient.HttpClient;
> import org.apache.commons.httpclient.methods.GetMethod;
> public class HttpConnectionTimeoutProblem
> {
> public static void main(String[] args)
> {
> long start = System.currentTimeMillis();
> try
> {
> HttpClient client = new HttpClient();
> client.getParams().setConnectionManagerTimeout(1000);
> client.getParams().setSoTimeout(1000);
> GetMethod method = new GetMethod("http://www.987aksj239874nkjhse.gov");
> method.getParams().setSoTimeout(1000);
> int httpRc = client.executeMethod(method);
> System.out.println("httpRc = " + httpRc);
> }
> catch (Exception e)
> {
> long time = System.currentTimeMillis() - start;
> System.out.println("Exception caught after " + time + ": " + e);
> e.printStackTrace();
> }
> }
> }
> The output from this is (on my Linux machine)
> --------------------------------------------------------------
> log4j:WARN No appenders could be found for logger (org.apache.commons.httpclient.HttpClient).
> log4j:WARN Please initialize the log4j system properly.
> Exception caught after 20593: java.net.UnknownHostException: www.987aksj239874nkjhse.gov
> java.net.UnknownHostException: www.987aksj239874nkjhse.gov
> at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
> at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
> at java.net.Socket.connect(Socket.java:520)
> at java.net.Socket.connect(Socket.java:470)
> at java.net.Socket.<init>(Socket.java:367)
> at java.net.Socket.<init>(Socket.java:240)
> at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:79)
> at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:121)
> at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
> at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
> at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
> at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
> at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
> at HttpConnectionTimeoutProblem.main(HttpConnectionTimeoutProblem.java:17)
> Thanks
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org