class EventMachine::DnsResolver::DnsSocket

Public Instance Methods

connected?() click to toggle source
# File lib/em-dns-resolver.rb, line 110
def connected?; @connected; end
nameserver_port() click to toggle source
# File lib/em-dns-resolver.rb, line 92
def nameserver_port
  @nameserver_port ||= DnsResolver.nameserver_port
end
nameserver_port=(ns_p) click to toggle source
# File lib/em-dns-resolver.rb, line 89
def nameserver_port= (ns_p)
  @nameserver_port = ns_p
end
post_init() click to toggle source
# File lib/em-dns-resolver.rb, line 68
def post_init
  @requests = {}
  @connected = true
  EM.add_periodic_timer(0.1, &method(:tick))
end
receive_data(data) click to toggle source

Decodes the packet, looks for the request and passes the response over to the requester

# File lib/em-dns-resolver.rb, line 97
def receive_data(data)
  msg = nil
  begin
    msg = Resolv::DNS::Message.decode data
  rescue
  else
    req = @requests[msg.id]
    if req
      @requests.delete(msg.id)
      req.receive_answer(msg)
    end
  end
end
register_request(id, req) click to toggle source
# File lib/em-dns-resolver.rb, line 79
def register_request(id, req)
  if @requests.has_key?(id)
    raise RequestIdAlreadyUsed
  else
    @requests[id] = req
  end
end
send_packet(pkt) click to toggle source
# File lib/em-dns-resolver.rb, line 86
def send_packet(pkt)
  send_datagram pkt, *nameserver_port
end
tick() click to toggle source

Periodically called each second to fire request retries

# File lib/em-dns-resolver.rb, line 74
def tick
  @requests.each do |id,req|
    req.tick
  end
end
unbind() click to toggle source
# File lib/em-dns-resolver.rb, line 111
def unbind
  @connected = false
end

Public Class Methods

open() click to toggle source
# File lib/em-dns-resolver.rb, line 65
def self.open
  EM::open_datagram_socket('0.0.0.0', 0, self)
end