In: |
resolv.rb
|
Parent: | Requester |
# File resolv.rb, line 663 def initialize(host, port=Port) super() @host = host @port = port @sock = TCPSocket.new @sock.connect(host, port) @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD @id = -1 @senders = {} @thread = Thread.new { DNSThreadGroup.add Thread.current loop { len = @sock.read(2).unpack('n') reply = @sock.read(len) msg = begin Message.decode(reply) rescue DecodeError STDERR.print("DNS message decoding error: #{reply.inspect}") next end if s = @senders[msg.id] s.push msg else #STDERR.print("non-handled DNS message: #{msg.inspect}") end } } end
# File resolv.rb, line 692 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] = [request.length, id].pack('nn') return @senders[id] = Sender.new(request, data, @sock, queue) end