# File lib/em-dns-resolver.rb, line 110 def connected?; @connected; end
# File lib/em-dns-resolver.rb, line 92 def nameserver_port @nameserver_port ||= DnsResolver.nameserver_port end
# File lib/em-dns-resolver.rb, line 89 def nameserver_port= (ns_p) @nameserver_port = ns_p end
# File lib/em-dns-resolver.rb, line 68 def post_init @requests = {} @connected = true EM.add_periodic_timer(0.1, &method(:tick)) end
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
# 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
# File lib/em-dns-resolver.rb, line 86 def send_packet(pkt) send_datagram pkt, *nameserver_port end
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
# File lib/em-dns-resolver.rb, line 111 def unbind @connected = false end
# File lib/em-dns-resolver.rb, line 65 def self.open EM::open_datagram_socket('0.0.0.0', 0, self) end