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

Methods

new   sender  

Classes and Modules

Class Resolv::DNS::Requester::UnconnectedUDP::Sender

Public Class methods

[Source]

     # File lib/resolv.rb, line 570
570:         def initialize
571:           super()
572:           @sock = UDPSocket.new
573:           @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD
574:           @id = {}
575:           @id.default = -1
576:           @thread = Thread.new {
577:             DNSThreadGroup.add Thread.current
578:             loop {
579:               reply, from = @sock.recvfrom(UDPSize)
580:               msg = begin
581:                 Message.decode(reply)
582:               rescue DecodeError
583:                 STDERR.print("DNS message decoding error: #{reply.inspect}\n")
584:                 next
585:               end
586:               if s = @senders[[[from[3],from[1]],msg.id]]
587:                 s.recv msg
588:               else
589:                 #STDERR.print("non-handled DNS message: #{msg.inspect} from #{from.inspect}\n")
590:               end
591:             }
592:           }
593:         end

Public Instance methods

[Source]

     # File lib/resolv.rb, line 595
595:         def sender(msg, data, queue, host, port=Port)
596:           service = [host, port]
597:           id = Thread.exclusive {
598:             @id[service] = (@id[service] + 1) & 0xffff
599:           }
600:           request = msg.encode
601:           request[0,2] = [id].pack('n')
602:           return @senders[[service, id]] =
603:             Sender.new(request, data, @sock, host, port, queue)
604:         end

[Validate]