class Specter::Server
Attributes
cli[R]
logger[R]
options[R]
socket[R]
stack[R]
Public Class Methods
new(cli)
click to toggle source
# File lib/specter/server.rb, line 21 def initialize(cli) @cli = cli @options = cli.options @logger = Logger.new(STDOUT) @socket = TCPServer.new(options[:host], options[:port]) @stack = Middleware.new(self) end
Public Instance Methods
handle_requests()
click to toggle source
# File lib/specter/server.rb, line 35 def handle_requests loop do client = socket.accept process_request(client) end end
log_error(client, e)
click to toggle source
# File lib/specter/server.rb, line 64 def log_error(client, e) logger.error "%s - %s: %s\n%s" % [ client.remote_address.ip_address, e.class, e.message, e.backtrace.join("\n") ] end
log_request(env)
click to toggle source
# File lib/specter/server.rb, line 71 def log_request(env) logger.info "%s - %s - %s" % [ env.client.remote_address.ip_address, env.request.command, env.request.args.inspect ] end
log_timeout(client)
click to toggle source
# File lib/specter/server.rb, line 58 def log_timeout(client) logger.warn "%s - timeout" % [ client.remote_address.ip_address ] end
process_request(client)
click to toggle source
# File lib/specter/server.rb, line 42 def process_request(client) Timeout.timeout(5) do req = Request.parse(client.gets) env = Env.new(client, req) log_request(env) @stack.call(env) client.write env.to_str end rescue Timeout::Error log_timeout(client) rescue Object => e log_error(client, e) ensure client.close rescue nil end
run()
click to toggle source
# File lib/specter/server.rb, line 30 def run BasicSocket.do_not_reverse_lookup = true return @thread = Thread.new { handle_requests } end