HttpClient shutdown with TIME_WAIT
----------------------------------

                 Key: HTTPCLIENT-993
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-993
             Project: HttpComponents HttpClient
          Issue Type: Bug
    Affects Versions: 4.0.1
         Environment: OS: OS X 10.6, RHE-4 (x86)
Java: 1.6
            Reporter: Thomas Huang


I am new to HttpClient.  I took the example directly from the HttpClient 
javadoc by invoking it 10 times.  The program ran fine, but I see 10 TIME_WAIT. 
 This suggests the example code is not closing the socket gracefully.  The 
problem with TIME_WAIT is the program will eventually hang if I increase the 
number of iterations. 

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.*;


public class TimeWait {

  public static void test (String url) throws Exception {
     HttpClient httpclient = new DefaultHttpClient();

     // Prepare a request object
     HttpGet httpget = new HttpGet(url);

     // Execute the request
     HttpResponse response = httpclient.execute(httpget);

     // Examine the response status
     System.out.println(response.getStatusLine());

     // Get hold of the response entity
     HttpEntity entity = response.getEntity();

     // If the response does not enclose an entity, there is no need
     // to worry about connection release
     if (entity != null) {
        InputStream instream = entity.getContent();
        try {

           BufferedReader reader = new BufferedReader(
                 new InputStreamReader(instream));
           // do something useful with the response
           System.out.println(reader.readLine());
        } catch (IOException ex) {
           // In case of an IOException the connection will be released
           // back to the connection manager automatically
           throw ex;
        } catch (RuntimeException ex) {
           // In case of an unexpected exception you may want to abort
           // the HTTP request in order to shut down the underlying
           // connection and release it back to the connection manager.
           httpget.abort();
           throw ex;
        } finally {
           // Closing the input stream will trigger connection release
           instream.close();
        }

        // When HttpClient instance is no longer needed,
        // shut down the connection manager to ensure
        // immediate deallocation of all system resources
        httpclient.getConnectionManager().shutdown();
     }
  }

  public static void main (String[] args) throws Exception {
     for (int i=0; i<10; ++i) {
        TimeWait.test("http://www.apache.org";);
     }
  }
}


-- 
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-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to