# File lib/dnstraverse/traverser.rb, line 36
    def initialize(args)
      Socket.do_not_reverse_lookup = true
      Log.level = args[:loglevel] if args[:loglevel]
      Log.debug { "Initialize with args: " + args.inspect }
      Dnsruby.log.level = args[:libloglevel] if args[:libloglevel]
      @state = args[:state] || nil
      @maxdepth = args[:maxdepth] || 10
      @progress_main = args[:progress_main] || method(:progress_null)
      @progress_resolve = args[:progress_resolve] || method(:progress_null)
      @fast = args[:fast] || false # use fast algorithm, less accurate
      @answered = @fast ? Hash.new : nil # for fast algorithm
      @seen = Hash.new # servernames to IP addresses of anything we see
      retries = args[:retries] || 2
      retry_delay = args[:retry_delay] || 2
      packet_timeout = args[:packet_timeout] || 2
      dnssec = args[:dnssec] || false
      srcaddr = args[:srcaddr] || '0.0.0.0'
      use_tcp = args[:always_tcp] || false
      ignore_truncation = args[:allow_tcp] ? false : true
      udpsize = args[:udpsize] || 512
      cfg = Dnsruby::Config.new
      rescfg = { :nameserver => cfg.nameserver, :ndots => cfg.ndots,
        :apply_domain => false, :apply_search_list => false}
      resargs = { :config_info => rescfg, :use_tcp => use_tcp, :recurse => false,
        :retry_times => retries, :retry_delay => retry_delay, :dnssec => dnssec,
        :ignore_truncation => ignore_truncation, :src_address => srcaddr,
        :udp_size => udpsize.to_i, :packet_timeout => packet_timeout }
      Log.debug { "Creating remote resolver object"}
      CachingResolver.use_eventmachine(false)
      @resolver = CachingResolver.new(resargs) # used for set nameservers
      @resolver.udp_size = udpsize.to_i
      Log.debug { "Creating local resolver object"}
      resargs[:recurse] = true
      @lresolver = Dnsruby::Resolver.new(resargs) # left on local default
      @lresolver.udp_size = udpsize.to_i
      self
    end