# File lib/rcodetools/fork.rb, line 172
  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 # close my copy.
        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