def self.start_server(args = ARGV)
settings = parse_server_args args
setup_environment settings
daemonize if settings[:daemonize]
server = TCPServer.new 'localhost', settings[:port]
$stderr.puts "#{$0} Running as PID #{$$} on #{settings[:port]}" unless
settings[:daemonize]
loop do
Thread.new server.accept do |socket|
begin
args_length = socket.gets.to_i
args = socket.read args_length
settings, argv = Marshal.load args
fork do
daemonize socket do
ARGV.replace argv
setup_environment settings
socket.close
end
end
socket.close
rescue => e
socket.close if socket
end
end
end
rescue Exception => e
puts "Failed to catch #{e.class}:#{e.message}"
puts "\t#{e.backtrace.join "\n\t"}"
end