docs: def _raise_connection_failure(address, error):
      """Convert a socket.error to ConnectionFailure and raise it."""
      host, port = address
      # If connecting to a Unix socket, port will be None.
      if port is not None:
          msg = '%s:%d: %s' % (host, port, error)
      else:
          msg = '%s: %s' % (host, error)
      if isinstance(error, socket.timeout):
          raise NetworkTimeout(msg)
      elif isinstance(error, SSLError) and 'timed out' in str(error):
          # CPython 2.6, 2.7, PyPy 2.x, and PyPy3 do not distinguish network
          # timeouts from other SSLErrors (https://bugs.python.org/issue10272).
          # Luckily, we can work around this limitation because the phrase
          # 'timed out' appears in all the timeout related SSLErrors raised
          # on the above platforms. CPython >= 3.2 and PyPy3.3 correctly raise
          # socket.timeout.
          raise NetworkTimeout(msg)
      else:
          raise AutoReconnect(msg)