class EventMachine::DNS::Request

Attributes

max_tries[RW]
retry_interval[RW]

Public Class Methods

new(socket, hostname) click to toggle source
# File lib/em/resolver.rb, line 122
def initialize(socket, hostname)
  @socket = socket
  @hostname = hostname
  @tries = 0
  @last_send = Time.at(0)
  @retry_interval = 3
  @max_tries = 5

  if addrs = Resolver.hosts[hostname]
    succeed addrs
  else
    EM.next_tick { tick }
  end
end

Public Instance Methods

receive_answer(msg) click to toggle source
# File lib/em/resolver.rb, line 147
def receive_answer(msg)
  addrs = []
  msg.each_answer do |name,ttl,data|
    if data.kind_of?(Resolv::DNS::Resource::IN::A) ||
        data.kind_of?(Resolv::DNS::Resource::IN::AAAA)
      addrs << data.address.to_s
    end
  end

  if addrs.empty?
    fail "rcode=#{msg.rcode}"
  else
    succeed addrs
  end
end
tick() click to toggle source
# File lib/em/resolver.rb, line 137
def tick
  # 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