Module: RubyDNS::Resolver::Request::UDPRequestHandler

Defined in:
lib/rubydns/resolver.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.open(host, port, request) ⇒ Object



194
195
196
197
# File 'lib/rubydns/resolver.rb', line 194

def self.open(host, port, request)
  # Open a datagram socket... EventMachine doesn't support connected datagram sockets, so we have to cheat a bit:
  EventMachine::open_datagram_socket('', 0, self, request, host, port)
end

Instance Method Details

#initialize(request, host, port) ⇒ Object



199
200
201
202
203
# File 'lib/rubydns/resolver.rb', line 199

def initialize(request, host, port)
  @request = request
  @host = host
  @port = port
end

#post_initObject



205
206
207
208
# File 'lib/rubydns/resolver.rb', line 205

def post_init
  # Sending question to remote DNS server...
  send_datagram(@request.packet, @host, @port)
end

#receive_data(data) ⇒ Object



210
211
212
213
214
215
216
217
218
# File 'lib/rubydns/resolver.rb', line 210

def receive_data(data)
  # Receiving response from remote DNS server...
  message = RubyDNS::decode_message(data)
  
  # The message id must match, and it can't be truncated:
  @request.process_response!(message)
rescue Resolv::DNS::DecodeError => error
  @request.process_response!(error)
end