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

Class | Resolv::DNS::Requester::ConnectedUDP
In: | resolv.rb
Parent: | Requester

### Methods

new sender

### Classes and Modules

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

### Public Class methods

new(host, port=Port)

[Source]

    # File resolv.rb, line 620
            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

### Public Instance methods

sender(msg, data, queue, host=@host, port=@port)

[Source]

    # File resolv.rb, line 647
            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

[Validate]