Obtains a connection within a given time.
This method will block until a connection becomes available,
the timeout expires, or the connection manager is
shut down.
Timeouts are handled with millisecond precision.
If abortRequest() is called while this is blocking or
before this began, an InterruptedException will
be thrown.