def self.start_server(args = ARGV)
begin
require 'rubygems'
rescue LoadError
end
write_pwd
settings = parse_server_args args
setup_environment settings
server = TCPServer.new 'localhost', settings[:port]
$stderr.puts "#{$0} Running as PID #{$$} on #{settings[:port]}"
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 Interrupt, SystemExit
File.unlink PWD_FILE
rescue Exception => e
File.unlink PWD_FILE
puts "Failed to catch #{e.class}:#{e.message}"
puts "\t#{e.backtrace.join "\n\t"}"
end