Class: RubyDNS::TCPSocketHandler

Inherits:
GenericHandler show all
Defined in:
lib/rubydns/handler.rb

Direct Known Subclasses

TCPHandler

Instance Method Summary collapse

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
  options = {peer: remote_host}
  
  input_data = StreamTransport.read_chunk(socket)
  
  response = process_query(input_data, options)
  
  length = StreamTransport.write_message(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

#runObject



151
152
153
# File 'lib/rubydns/handler.rb', line 151

def run
  loop { async.handle_connection @socket.accept }
end