# File lib/Dnsruby/Recursor.rb, line 185
    def Recursor.set_hints(hints, resolver)
      TheLog.debug(";; hints(#{hints.inspect})\n")
      if (!hints && @@nameservers)
        @@hints=(@@nameservers)
      else
        @@nameservers=(hints)
      end
      TheLog.debug(";; verifying (root) zone...\n")
      # bind always asks one of the hint servers
      # for who it thinks is authoritative for
      # the (root) zone as a sanity check.
      # Nice idea.
          
      resolver.recurse=(1)
      packet=resolver.query(".", "NS", "IN")
      hints = Hash.new
      if (packet)
        if (ans = packet.answer)
          ans.each do |rr|
            if (rr.name.to_s =~ /^\.?$/ and
                  rr.type == Types::NS)
              # Found root authority
              server = rr.nsdname.to_s.downcase
              server.sub!(/\.$/,"")
              TheLog.debug(";; FOUND HINT: #{server}\n")
              hints[server] = AddressCache.new
            end
          end
          packet.additional.each do |rr|
            TheLog.debug(";; ADDITIONAL: "+rr.inspect+"\n")
            server = rr.name.to_s.downcase
            server.sub!(/\.$/,"")
            if (server)
              if ( rr.type == Types::A)
                #print ";; ADDITIONAL HELP: $server -> [".$rr->rdatastr."]\n" if $self->{'debug'};
                if (hints[server]!=nil)
                  TheLog.debug(";; STORING IP: #{server} IN A "+rr.address.to_s+"\n")
                  hints[server].push([rr.address.to_s, rr.ttl])
                end
              end
              if ( rr.type == Types::AAAA)
                #print ";; ADDITIONAL HELP: $server -> [".$rr->rdatastr."]\n" if $self->{'debug'};
                if (hints[server])
                  TheLog.debug(";; STORING IP6: #{server} IN AAAA "+rr.address.to_s+"\n")
                  hints[server].push([rr.address.to_s, rr.ttl])
                end
              end
                  
            end 
          end
        end
        #                      foreach my $server (keys %hints) {
        hints.keys.each do |server|
          if (!hints[server] || hints[server].length == 0)
            # Wipe the servers without lookups
            hints.delete(server)
          end
        end
        @@hints = hints
      else
        @@hints = {}
      end
      if (@@hints.size > 0)
        if (@debug)
          TheLog.info(";; USING THE FOLLOWING HINT IPS:\n")
          @@hints.values.each do |ips|
            ips.each do |server|
              TheLog.info(";;  #{server}\n")
            end
          end
        end
      else
        warn "Server ["+(@@nameservers)[0].to_s+"] did not give answers"
      end
          
      # Disable recursion flag.
      resolver.recurse=(0)
          
      #  return $self->nameservers( map { @{ $_ } } values %{ $self->{'hints'} } );
      @@nameservers = @@hints.values
      return @@nameservers
    end