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