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

Methods

close   new   recv_reply   sender  

Classes and Modules

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

Public Class methods

[Source]

     # File lib/resolv.rb, line 675
675:         def initialize(host, port=Port)
676:           super()
677:           @host = host
678:           @port = port
679:           @sock = UDPSocket.new(host.index(':') ? Socket::AF_INET6 : Socket::AF_INET)
680:           DNS.bind_random_port(@sock)
681:           @sock.connect(host, port)
682:           @sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::F_SETFD
683:         end

Public Instance methods

[Source]

     # File lib/resolv.rb, line 700
700:         def close
701:           super
702:           @senders.each_key {|from, id|
703:             DNS.free_request_id(@host, @port, id)
704:           }
705:         end

[Source]

     # File lib/resolv.rb, line 685
685:         def recv_reply
686:           reply = @sock.recv(UDPSize)
687:           return reply, nil
688:         end

[Source]

     # File lib/resolv.rb, line 690
690:         def sender(msg, data, host=@host, port=@port)
691:           unless host == @host && port == @port
692:             raise RequestError.new("host/port don't match: #{host}:#{port}")
693:           end
694:           id = DNS.allocate_request_id(@host, @port)
695:           request = msg.encode
696:           request[0,2] = [id].pack('n')
697:           return @senders[[nil,id]] = Sender.new(request, data, @sock)
698:         end

[Validate]