code: def _get_conn(self, timeout=None):
          
          conn = None
          try:
              conn = self.pool.get(block=self.block, timeout=timeout)
  
          except AttributeError:  # self.pool is None
              raise ClosedPoolError(self, "Pool is closed.")
  
          except queue.Empty:
              if self.block:
                  raise EmptyPoolError(self,
                                       "Pool reached maximum size and no more "
                                       "connections are allowed.")
              pass  # Oh well, we'll create a new connection then
  
          # If this is a persistent connection, check if it got disconnected
          if conn and is_connection_dropped(conn):
              log.debug("Resetting dropped connection: %s", self.host)
              conn.close()
              if getattr(conn, 'auto_open', 1) == 0:
                  # This is a proxied connection that has been mutated by
                  # httplib._tunnel() and cannot be reused (since it would
                  # attempt to bypass the proxy)
                  conn = None
  
          return conn or self._new_conn()
docs: Get a connection. Will return a pooled connection if one is available.
  
          If no connections are available and :prop:`.block` is ``False``, then a
          fresh connection is returned.
  
          :param timeout:
              Seconds to wait before giving up and raising
              :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and
              :prop:`.block` is ``True``.