code: def get_host(self, retry_count=3):
          
  
          try:
  
              default_timeout_set = False
              if not socket.getdefaulttimeout():
  
                  socket.setdefaulttimeout(self.timeout)
                  default_timeout_set = True
  
              log.debug('Host query for {0}'.format(self.address_str))
              ret = socket.gethostbyaddr(self.address_str)
  
              if default_timeout_set:  # pragma: no cover
  
                  socket.setdefaulttimeout(None)
  
              results = namedtuple('get_host_results', 'hostname, aliaslist, '
                                                       'ipaddrlist')
              return results(ret)
  
          except (socket.timeout, socket.error) as e:
  
              log.debug('Host query socket error: {0}'.format(e))
              if retry_count > 0:
  
                  log.debug('Host query retrying (count: {0})'.format(
                      str(retry_count)))
  
                  return self.get_host(retry_count - 1)
  
              else:
  
                  raise HostLookupError(
                      'Host lookup failed for {0}.'.format(self.address_str)
                  )
  
          except:  # pragma: no cover
  
              raise HostLookupError(
                  'Host lookup failed for {0}.'.format(self.address_str)
              )
docs: The function for retrieving host information for an IP address.
  
          Args:
              retry_count (:obj:`int`): The number of times to retry in case
                  socket errors, timeouts, connection resets, etc. are
                  encountered. Defaults to 3.
  
          Returns:
              namedtuple:
  
              :hostname (str): The hostname returned mapped to the given IP
                  address.
              :aliaslist (list): Alternate names for the given IP address.
              :ipaddrlist (list): IPv4/v6 addresses mapped to the same hostname.
  
          Raises:
              HostLookupError: The host lookup failed.