docs: def parse_host(entity, default_port=DEFAULT_PORT):
      """Validates a host string
  
      Returns a 2-tuple of host followed by port where port is default_port
      if it wasn't specified in the string.
  
      :Parameters:
          - `entity`: A host or host:port string where host could be a
                      hostname or IP address.
          - `default_port`: The port number to use when one wasn't
                            specified in entity.
      """
      host = entity
      port = default_port
      if entity[0] == '[':
          host, port = parse_ipv6_literal_host(entity, default_port)
      elif entity.endswith(".sock"):
          return entity, default_port
      elif entity.find(':') != -1:
          if entity.count(':') > 1:
              raise ValueError("Reserved characters such as ':' must be "
                               "escaped according RFC 2396. An IPv6 "
                               "address literal must be enclosed in '[' "
                               "and ']' according to RFC 2732.")
          host, port = host.split(':', 1)
      if isinstance(port, string_type):
          if not port.isdigit() or int(port) > 65535 or int(port) <= 0:
              raise ValueError("Port must be an integer between 0 and 65535: %s"
                               % (port,))
          port = int(port)
  
      # Normalize hostname to lowercase, since DNS is case-insensitive:
      # http://tools.ietf.org/html/rfc4343
      # This prevents useless rediscovery if "foo.com" is in the seed list but
      # "FOO.com" is in the ismaster response.
      return host.lower(), port