Class: RubyDNS::TCPSocketHandler
- Inherits:
-
GenericHandler
- Object
- GenericHandler
- RubyDNS::TCPSocketHandler
- Defined in:
- lib/rubydns/handler.rb
Direct Known Subclasses
Instance Method Summary collapse
- #handle_connection(socket) ⇒ Object
-
#initialize(server, socket) ⇒ TCPSocketHandler
constructor
A new instance of TCPSocketHandler.
- #run ⇒ Object
Methods inherited from GenericHandler
#error_response, #process_query
Constructor Details
#initialize(server, socket) ⇒ TCPSocketHandler
Returns a new instance of TCPSocketHandler.
143 144 145 146 147 148 149 |
# File 'lib/rubydns/handler.rb', line 143 def initialize(server, socket) super(server) @socket = socket async.run end |
Instance Method Details
#handle_connection(socket) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/rubydns/handler.rb', line 155 def handle_connection(socket) _, remote_port, remote_host = socket.peeraddr = {peer: remote_host, port: remote_port, proto: :tcp} input_data = StreamTransport.read_chunk(socket) response = process_query(input_data, ) length = StreamTransport.(socket, response) @logger.debug "<#{response.id}> Wrote #{length} bytes via TCP..." rescue EOFError => error @logger.warn "<> TCP session ended prematurely!" rescue DecodeError @logger.warn "<> Could not decode incoming TCP data!" ensure socket.close end |
#run ⇒ Object
151 152 153 |
# File 'lib/rubydns/handler.rb', line 151 def run loop { async.handle_connection @socket.accept } end |