From: Alex Young Date: 2006-06-02T18:50:15+09:00 Subject: WEBrick on Windows Hi all, I'm trying to benchmark a few HTTP server types on Windows (XP Home, specifically - don't ask why), and I've hit a snag with this code: ------------------------------ require 'xmlrpc/server' require 'xmlrpc/client' require 'benchmark' class ServerObject < XMLRPC::Server def initialize super(8080) @server.config[:AccessLog] = [['', '']] self.add_handler('benchmark.simple') do test() end end def test 'test' end end test_obj = ServerObject.new serving_thread = Thread.new{ test_obj.serve } client = XMLRPC::Client.new('127.0.0.1', '/', '8080') n = 2000 Benchmark.bmbm(20) do |b| b.report('Direct RPC') { for i in 1..n; client.call('benchmark.simple'); end } end ------------------------- The problem is that with n that high, I get an c:/ruby/lib/ruby/1.8/net/http.rb:562:in `initialize': Bad file descriptor - connect(2) (Errno::EBADF) from c:/ruby/lib/ruby/1.8/net/http.rb:562:in `connect' ... from c:/ruby/lib/ruby/1.8/xmlrpc/client.rb:535:in `do_rpc' error during the second round. Looking at netstat -a afterwards, I see almost every local port in the range 1026-5000 in the TIME_WAIT state. That's a suspiciously round number, and I suspect there's a 'client_port_max=5000' setting somewhere. That's not what bothers me. Why are these ports waiting, and how can I close them, or reduce their timeout value? I'd rather not insert 30 second waits all over the place if that's enough of a delay... Any tips? Moving to a different OS is not, unfortunately, an option, although shifting up to XP Pro might be in a pinch. -- Alex