I'm in the planning stages of converting some code that uses HttpClient 3.0.1 
to upgrade to 4.1.1 (or whatever is the latest when I get to that point).  
There is one symptom that we're seeing with 3.0.1 that I'm wondering will be 
fixed in 4.1.1.

We've always set both a socket timeout and a connection timeout, but I could 
never figure out a valid way to test the latter, so I wasn't sure if it was 
actually doing anything.  I've since gotten more information that may lead to a 
valid test case.

One symptom that we see on some of our test servers sometimes is that a 
connection is attempted to a host that is blocked by the firewall, and instead 
of failing the connection immediately, the connection hangs for a long time and 
gets reported as a "stuck thread" in WebLogic after 600 seconds.

We see the following stack trace (excerpt):

        java.net.PlainSocketImpl.socketConnect(Native Method)
        java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        java.net.Socket.connect(Socket.java:529)
        
com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
        
com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:394)
        
com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:123)
        
org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:81)
        
org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:126)
        
org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)

Our connection timeout is set to 90 seconds (probably hugely more than it needs 
to be).  Being that it's sitting in "socketConnect()", it looks to me like it's 
still trying to connect, but it's obviously not timing out after 90 seconds.

We set the read and connection timeouts like this:
------------------
        HttpClientParams    clientParams    = new HttpClientParams();
        clientParams.setSoTimeout(readTimeout);
        clientParams.setConnectionManagerTimeout(connectionTimeout);
        
        HttpClient  httpClient  = new HttpClient(clientParams);
------------------

We're doing this very differently in the code that's using the 4.1.1 
implementation.  Both values are in milliseconds.

The question is: Is this bad behavior one of the known problems with HttpClient 
3.0.1?  Should I expect it to better respect the connection timeout with 4.1.1?

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

Reply via email to