'See L{twisted.internet.interfaces.IResolverSimple.getHostByName}.
Note that the elements of C{timeout} are summed and the result is used
as a timeout for the lookup.  Any intermediate timeout or retry logic
is left up to the platform via L{socket.gethostbyname}.'

def getHostByName(self, name, timeout=(1, 3, 11, 45)):

    if timeout:
        timeoutDelay = sum(timeout)
    else:
        timeoutDelay = 60
    userDeferred = defer.Deferred()
    lookupDeferred = threads.deferToThreadPool(self.reactor, self.reactor.getThreadPool(), socket.gethostbyname, name)
    cancelCall = self.reactor.callLater(timeoutDelay, self._cleanup, name, lookupDeferred)
    self._runningQueries[lookupDeferred] = (userDeferred, cancelCall)
    lookupDeferred.addBoth(self._checkTimeout, name, lookupDeferred)
    return userDeferred
