| Class | Resolv::DNS::Requester::UnconnectedUDP |
| In: |
lib/resolv.rb
|
| Parent: | Requester |
# 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
# 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