# File lib/mongrel.rb, line 711
    def run
      BasicSocket.do_not_reverse_lookup=true

      configure_socket_options

      if $tcp_defer_accept_opts
        @socket.setsockopt(*$tcp_defer_accept_opts) rescue nil
      end

      @acceptor = Thread.new do
        while true
          begin
            client = @socket.accept

            if $tcp_cork_opts
              client.setsockopt(*$tcp_cork_opts) rescue nil
            end

            worker_list = @workers.list

            if worker_list.length >= @num_processors
              STDERR.puts "Server overloaded with #{worker_list.length} processors (#@num_processors max). Dropping connection."
              client.close rescue Object
              reap_dead_workers("max processors")
            else
              thread = Thread.new(client) {|c| process_client(c) }
              thread[:started_on] = Time.now
              @workers.add(thread)

              sleep @timeout/100 if @timeout > 0
            end
          rescue StopServer
            @socket.close rescue Object
            break
          rescue Errno::EMFILE
            reap_dead_workers("too many open files")
            sleep 0.5
          rescue Errno::ECONNABORTED
            # client closed the socket even before accept
            client.close rescue Object
          rescue Object => exc
            STDERR.puts "!!!!!! UNHANDLED EXCEPTION! #{exc}.  TELL ZED HE'S A MORON."
            STDERR.puts $!.backtrace.join("\n") if $mongrel_debug_client
          end
        end
        graceful_shutdown
      end

      return @acceptor
    end