------art_23503_13727455.1149335224798
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Are you sure your connections are being closed after each call to
client.call(...)? You may be hitting a per-process limit on open
descriptors. Are you running netstat while your process is running or after
it ends with the EBADF error? If the latter, then try catching EBADF and put
in a long sleep, then look at netstat on a different shell. Localhost
connections don't usually need to spend much time in the TIME_WAIT state.


On 6/2/06, Alex Young <alex / blackkettle.org> wrote:
>
> 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  erverObject.new
> serving_thread  hread.new{ test_obj.serve }
>
> client  MLRPC::Client.new('127.0.0.1', '/', '8080')
>
> n  000
> 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_maxP00' 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
>
>

------art_23503_13727455.1149335224798--