In: |
resolv.rb
|
Parent: | Requester |
# File resolv.rb, line 618 def initialize(host, port=Port) super() @host = host @port = port @sock = UDPSocket.new @sock.connect(host, port) @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD @id = -1 @thread = Thread.new { DNSThreadGroup.add Thread.current loop { reply = @sock.recv(UDPSize) msg = begin Message.decode(reply) rescue DecodeError STDERR.print("DNS message decoding error: #{reply.inspect}") next end if s = @senders[msg.id] s.recv msg else #STDERR.print("non-handled DNS message: #{msg.inspect}") end } } end
# File resolv.rb, line 645 def sender(msg, data, queue, host=@host, port=@port) unless host == @host && port == @port raise RequestError.new("host/port don't match: #{host}:#{port}") end id = Thread.exclusive { @id = (@id + 1) & 0xffff } request = msg.encode request[0,2] = [id].pack('n') return @senders[id] = Sender.new(request, data, @sock, queue) end