title: httpclient exception "org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection"
body: <p>I am trying to send request to my server, with following code. it failed at 3rd request, always.</p>
  
  <pre><code>import java.io.InputStreamReader;
  import java.io.UnsupportedEncodingException;
  import java.nio.charset.Charset;
  
  import org.apache.http.HttpEntity;
  import org.apache.http.HttpResponse;
  import org.apache.http.HttpStatus;
  import org.apache.http.HttpVersion;
  import org.apache.http.client.HttpClient;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.entity.ContentType;
  import org.apache.http.entity.StringEntity;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
  import org.apache.http.params.BasicHttpParams;
  import org.apache.http.params.CoreConnectionPNames;
  import org.apache.http.params.HttpParams;
  import org.apache.http.params.HttpProtocolParams;
  import org.json.JSONException;
  import org.json.JSONObject;
  import org.json.JSONTokener;
  
  public class HttpClientTest {
      private HttpClient client;
  
      public HttpClientTest() {
          HttpParams params = new BasicHttpParams();
          params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000);  
          params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000);
  
          HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
          HttpProtocolParams.setContentCharset(params, "utf-8");
          HttpProtocolParams.setUseExpectContinue(params, true);
          ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
          cm.setMaxTotal(100);
          client = new DefaultHttpClient(cm, params);
  
          while (true) {
              HttpPost mPost = new HttpPost("http://myip/myservice");
  
              JSONObject json = new JSONObject();
              try {
                  json.put("serialNumber", "abcd");
              } catch (JSONException e1) {
                  e1.printStackTrace();
              }
              StringEntity s = null;
              try {
                  s = new StringEntity(json.toString());
              } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
              }               
              s.setContentEncoding("UTF-8");
              s.setContentType("application/json");
              mPost.setEntity(s);
  
              JSONObject response = null;
  
              System.out.println("HttpClientTest ---&gt; send post");
              HttpResponse mHttpResponse;
              try {
                  mHttpResponse = client.execute(mPost);
                  System.out.println("HttpClientTest  ---&gt; get response");
                  if(mHttpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                      HttpEntity entity = mHttpResponse.getEntity(); 
                      ContentType contentType = ContentType.getOrDefault(entity);
                      Charset charset = contentType.getCharset();
                      response = new JSONObject(new JSONTokener(new InputStreamReader(entity.getContent(), charset)));
  
                      System.out.println("HttpClientTest ---&gt; get result:" + response.toString());
                  } else {
                      mPost.abort();
                      break;
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
  
      public static void main(String[] args) {
          HttpClientTest t = new HttpClientTest();
      }
  }
  </code></pre>
  
  <p><strong>the exception as following:</strong></p>
  
  <pre><code>org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection
      at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:417)
      at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:300)
      at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:224)
      at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
      at com.i360r.client.takeaway.network.HttpClientTest.&lt;init&gt;(HttpClientTest.java:68)
      at com.i360r.client.takeaway.network.HttpClientTest.main(HttpClientTest.java:88)
  </code></pre>