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