code: public HttpConnection getConnectionWithTimeout(
          final HostConfiguration hostConfiguration, final long timeout) {
  
          final ConnectionInfo ci = getConnectionInfo();
          HttpConnection httpConnection = ci.conn;
  
          // make sure the host and proxy are correct for this connection
          // close it and set the values if they are not
          if(httpConnection == null || !finishLastResponse(httpConnection)
              || !hostConfiguration.hostEquals(httpConnection)
              || !hostConfiguration.proxyEquals(httpConnection)) {
  
              if(httpConnection != null && httpConnection.isOpen()) {
                  closer.closeConnection(httpConnection);
              }
  
              httpConnection = new HttpConnection(hostConfiguration);
              httpConnection.setHttpConnectionManager(this);
              httpConnection.getParams().setDefaults(this.params);
              ci.conn = httpConnection;
  
              httpConnection.setHost(hostConfiguration.getHost());
              httpConnection.setPort(hostConfiguration.getPort());
              httpConnection.setProtocol(hostConfiguration.getProtocol());
              httpConnection.setLocalAddress(hostConfiguration.getLocalAddress());
  
              httpConnection.setProxyHost(hostConfiguration.getProxyHost());
              httpConnection.setProxyPort(hostConfiguration.getProxyPort());
          }
  
          // remove the connection from the timeout handler
          ci.idleStartTime = Long.MAX_VALUE;
  
          return httpConnection;
      }
docs: @see HttpConnectionManager#getConnectionWithTimeout(HostConfiguration, long)
  
  @since 3.0