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, port: remote_port, proto: :tcp}
	
	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