# Resolv::DNS::Requester::TCP (Class)

In: | resolv.rb
Parent: | Requester

## Methods

new sender

## Classes and Modules

Class Resolv::DNS::Requester::TCP::Sender

## Public Class methods

new(host, port=Port)

[Source]

    # File resolv.rb, line 655
            def initialize(host, port=Port)
              super()
              @host = host
              @port = port
              @sock = TCPSocket.new
              @sock.connect(host, port)
              @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD
              @id = -1
              @senders = {}
              @thread = Thread.new {
                DNSThreadGroup.add Thread.current
                loop {
                  len = @sock.read(2).unpack('n')
                  reply = @sock.read(len)
                  msg = begin
                    Message.decode(reply)
                  rescue DecodeError
                    STDERR.print("DNS message decoding error: #{reply.inspect}")
                    next
                  end
                  if s = @senders[msg.id]
                    s.push 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 684
            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] = [request.length, id].pack('nn')
              return @senders[id] = Sender.new(request, data, @sock, queue)
            end

[Validate]