def query(name, type, klass = Dnsruby::Classes.IN)
@requests+= 1
ip = self.config.nameserver[0]
udp_size = self.udp_size
self.udp_size = udp_size
Log.debug { "Querying #{name} to #{ip} class #{klass} type #{type}"}
key = "key:res:#{ip}:#{name}:#{klass}:#{type}:#{udp_size}"
if @cache.has_key?(key) then
Log.debug { "Cache hit: #{key}" }
@cache_hits+= 1
return @cache[key]
end
answer = nil
begin
msg = Dnsruby::Message.new
msg.add_question(name, type, klass)
q = Queue.new
send_async(msg, q)
id, result, error = q.pop
answer = result || error
rescue => e
answer = RuntimeError.new "Dnsruby failure: " + e.to_s
end
@cache[key] = answer
Log.debug { "Cache store: #{key}" }
@cache[key]
end