| Class | Resolv::DNS::Requester::TCP |
| In: |
lib/resolv.rb
|
| Parent: | Requester |
# File lib/resolv.rb, line 716
716: def initialize(host, port=Port)
717: super()
718: @host = host
719: @port = port
720: @sock = TCPSocket.new(@host, @port)
721: @sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::F_SETFD
722: @senders = {}
723: end
# File lib/resolv.rb, line 749
749: def close
750: super
751: @senders.each_key {|from,id|
752: DNS.free_request_id(@host, @port, id)
753: }
754: end
# File lib/resolv.rb, line 725
725: def recv_reply
726: len = @sock.read(2).unpack('n')[0]
727: reply = @sock.read(len)
728: return reply, nil
729: end
# File lib/resolv.rb, line 731
731: def sender(msg, data, host=@host, port=@port)
732: unless host == @host && port == @port
733: raise RequestError.new("host/port don't match: #{host}:#{port}")
734: end
735: id = DNS.allocate_request_id(@host, @port)
736: request = msg.encode
737: request[0,2] = [request.length, id].pack('nn')
738: return @senders[[nil,id]] = Sender.new(request, data, @sock)
739: end