Class Resolv::DNS::Requester::ConnectedUDP
In: lib/resolv.rb
Parent: Requester

Methods

new   sender  

Classes and Modules

Class Resolv::DNS::Requester::ConnectedUDP::Sender

Public Class methods

[Source]

     # File lib/resolv.rb, line 620
620:         def initialize(host, port=Port)
621:           super()
622:           @host = host
623:           @port = port
624:           @sock = UDPSocket.new(host.index(':') ? Socket::AF_INET6 : Socket::AF_INET)
625:           @sock.connect(host, port)
626:           @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD
627:           @id = -1
628:           @thread = Thread.new {
629:             DNSThreadGroup.add Thread.current
630:             loop {
631:               reply = @sock.recv(UDPSize)
632:               msg = begin
633:                 Message.decode(reply)
634:               rescue DecodeError
635:                 STDERR.print("DNS message decoding error: #{reply.inspect}")
636:                 next
637:               end
638:               if s = @senders[msg.id]
639:                 s.recv msg
640:               else
641:                 #STDERR.print("non-handled DNS message: #{msg.inspect}")
642:               end
643:             }
644:           }
645:         end

Public Instance methods

[Source]

     # File lib/resolv.rb, line 647
647:         def sender(msg, data, queue, host=@host, port=@port)
648:           unless host == @host && port == @port
649:             raise RequestError.new("host/port don't match: #{host}:#{port}")
650:           end
651:           id = Thread.exclusive { @id = (@id + 1) & 0xffff }
652:           request = msg.encode
653:           request[0,2] = [id].pack('n')
654:           return @senders[id] = Sender.new(request, data, @sock, queue)
655:         end

[Validate]