Class: Resolv::DNS::Requester

Inherits:
Object
  • Object
show all
Defined in:
lib/resolv.rb

Overview

:nodoc:

Direct Known Subclasses

ConnectedUDP, TCP, UnconnectedUDP

Defined Under Namespace

Classes: ConnectedUDP, RequestError, Sender, TCP, UnconnectedUDP

Instance Method Summary collapse

Constructor Details

#initializeRequester

Returns a new instance of Requester.



606
607
608
609
# File 'lib/resolv.rb', line 606

def initialize
  @senders = {}
  @socks = nil
end

Instance Method Details

#closeObject



639
640
641
642
643
644
645
# File 'lib/resolv.rb', line 639

def close
  socks = @socks
  @socks = nil
  if socks
    socks.each {|sock| sock.close }
  end
end

#request(sender, tout) ⇒ Object



611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
# File 'lib/resolv.rb', line 611

def request(sender, tout)
  timelimit = Time.now + tout
  sender.send
  while true
    now = Time.now
    timeout = timelimit - now
    if timeout <= 0
      raise ResolvTimeout
    end
    select_result = IO.select(@socks, nil, nil, timeout)
    if !select_result
      raise ResolvTimeout
    end
    reply, from = recv_reply(select_result[0])
    begin
      msg = Message.decode(reply)
    rescue DecodeError
      next # broken DNS message ignored
    end
    if s = @senders[[from,msg.id]]
      break
    else
      # unexpected DNS message ignored
    end
  end
  return msg, s.data
end