Class: Resolv::DNS::Requester::TCP
- Inherits:
-
Resolv::DNS::Requester
- Object
- Resolv::DNS::Requester
- Resolv::DNS::Requester::TCP
- Defined in:
- lib/logmerge/resolv.rb
Defined Under Namespace
Classes: Sender
Instance Method Summary collapse
-
#initialize(host, port = Port) ⇒ TCP
constructor
A new instance of TCP.
- #sender(msg, data, queue, host = @host, port = @port) ⇒ Object
Methods inherited from Resolv::DNS::Requester
Constructor Details
#initialize(host, port = Port) ⇒ TCP
Returns a new instance of TCP.
669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 |
# File 'lib/logmerge/resolv.rb', line 669 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 |
Instance Method Details
#sender(msg, data, queue, host = @host, port = @port) ⇒ Object
698 699 700 701 702 703 704 705 706 |
# File 'lib/logmerge/resolv.rb', line 698 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 |