# File lib/mongrel.rb, line 709
709:     def run
710:       BasicSocket.do_not_reverse_lookup=true
711: 
712:       configure_socket_options
713: 
714:       if $tcp_defer_accept_opts
715:         @socket.setsockopt(*$tcp_defer_accept_opts) rescue nil
716:       end
717: 
718:       @acceptor = Thread.new do
719:         while true
720:           begin
721:             client = @socket.accept
722: 
723:             if $tcp_cork_opts
724:               client.setsockopt(*$tcp_cork_opts) rescue nil
725:             end
726: 
727:             worker_list = @workers.list
728: 
729:             if worker_list.length >= @num_processors
730:               STDERR.puts "Server overloaded with #{worker_list.length} processors (#@num_processors max). Dropping connection."
731:               client.close rescue Object
732:               reap_dead_workers("max processors")
733:             else
734:               thread = Thread.new(client) {|c| process_client(c) }
735:               thread[:started_on] = Time.now
736:               @workers.add(thread)
737: 
738:               sleep @timeout/100 if @timeout > 0
739:             end
740:           rescue StopServer
741:             @socket.close rescue Object
742:             break
743:           rescue Errno::EMFILE
744:             reap_dead_workers("too many open files")
745:             sleep 0.5
746:           rescue Errno::ECONNABORTED
747:             # client closed the socket even before accept
748:             client.close rescue Object
749:           rescue Object => exc
750:             STDERR.puts "!!!!!! UNHANDLED EXCEPTION! #{exc}.  TELL ZED HE'S A MORON."
751:             STDERR.puts $!.backtrace.join("\n") if $mongrel_debug_client
752:           end
753:         end
754:         graceful_shutdown
755:       end
756: 
757:       return @acceptor
758:     end