Called by EventMachine::DnsResolver::DnsSocket#receive_data
# File lib/em-dns-resolver.rb, line 151 def receive_answer(msg) result = [] msg.each_answer do |name,ttl,data| case data when Resolv::DNS::Resource::IN::A, Resolv::DNS::Resource::IN::AAAA result << data.address.to_s when Resolv::DNS::Resource::IN::PTR result << data.name.to_s end end if result.empty? fail "rcode=#{msg.rcode}" else succeed result end end
# File lib/em-dns-resolver.rb, line 134 def tick # @value already contains the response if @socket.nil? succeed [ @value ] return end # Break early if nothing to do return if @last_send + @retry_interval > Time.now if @tries < @max_tries send else fail 'retries exceeded' end end
# File lib/em-dns-resolver.rb, line 124 def initialize(socket, value, type) @socket = socket @value = value @type = type @tries = 0 @last_send = Time.at(0) @retry_interval = 3 @max_tries = 5 EM.next_tick { tick } end