'@param authorities: Resolvers which provide authoritative answers.
@type authorities: L{list} of L{IResolver} providers
@param caches: Resolvers which provide cached non-authoritative
answers. The first cache instance is assigned to
C{DNSServerFactory.cache} and its C{cacheResult} method will be
called when a response is received from one of C{clients}.
@type caches: L{list} of L{Cache<twisted.names.cache.CacheResolver>} instances
@param clients: Resolvers which are capable of performing recursive DNS
lookups.
@type clients: L{list} of L{IResolver} providers
@param verbose: An integer controlling the verbosity of logging of
queries and responses. Default is C{0} which means no logging. Set
to C{2} to enable logging of full query and response messages.
@type verbose: L{int}'

def __init__(self, authorities=None, caches=None, clients=None, verbose=0):

    resolvers = []
    if (authorities is not None):
        resolvers.extend(authorities)
    if (caches is not None):
        resolvers.extend(caches)
    if (clients is not None):
        resolvers.extend(clients)
    self.canRecurse = (not (not clients))
    self.resolver = resolve.ResolverChain(resolvers)
    self.verbose = verbose
    if caches:
        self.cache = caches[(-1)]
    self.connections = []
