class EventMachine::DNS::Socket
Public Class Methods
new()
click to toggle source
# File lib/em/resolver.rb, line 63 def initialize @nameserver = nil end
open()
click to toggle source
# File lib/em/resolver.rb, line 59 def self.open EventMachine::open_datagram_socket('0.0.0.0', 0, self) end
Public Instance Methods
deregister_request(id, req)
click to toggle source
# File lib/em/resolver.rb, line 99 def deregister_request(id, req) @requests.delete(id) stop_timer if @requests.length == 0 end
nameserver()
click to toggle source
# File lib/em/resolver.rb, line 112 def nameserver @nameserver || Resolver.nameserver end
nameserver=(ns)
click to toggle source
# File lib/em/resolver.rb, line 108 def nameserver=(ns) @nameserver = ns end
post_init()
click to toggle source
# File lib/em/resolver.rb, line 67 def post_init @requests = {} 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/resolver.rb, line 118 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) stop_timer if @requests.length == 0 req.receive_answer(msg) end end end
register_request(id, req)
click to toggle source
# File lib/em/resolver.rb, line 89 def register_request(id, req) if @requests.has_key?(id) raise RequestIdAlreadyUsed else @requests[id] = req end start_timer end
send_packet(pkt)
click to toggle source
# File lib/em/resolver.rb, line 104 def send_packet(pkt) send_datagram(pkt, nameserver, 53) end
start_timer()
click to toggle source
# File lib/em/resolver.rb, line 71 def start_timer @timer ||= EM.add_periodic_timer(0.1, &method(:tick)) end
stop_timer()
click to toggle source
# File lib/em/resolver.rb, line 75 def stop_timer EM.cancel_timer(@timer) @timer = nil end
tick()
click to toggle source
# File lib/em/resolver.rb, line 83 def tick @requests.each do |id,req| req.tick end end
unbind()
click to toggle source
# File lib/em/resolver.rb, line 80 def unbind end