# File resolv.rb, line 675 def initialize(host, port=Port) super() @host = host @port = port @sock = UDPSocket.new(host.index(':') ? Socket::AF_INET6 : Socket::AF_INET) DNS.bind_random_port(@sock) @sock.connect(host, port) @sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::F_SETFD end
# File resolv.rb, line 700 def close super @senders.each_key {|from, id| DNS.free_request_id(@host, @port, id) } end
# File resolv.rb, line 685 def recv_reply reply = @sock.recv(UDPSize) return reply, nil end
# File resolv.rb, line 690 def sender(msg, data, host=@host, port=@port) unless host == @host && port == @port raise RequestError.new("host/port don't match: #{host}:#{port}") end id = DNS.allocate_request_id(@host, @port) request = msg.encode request[0,2] = [id].pack('n') return @senders[[nil,id]] = Sender.new(request, data, @sock) end