From: Nathaniel Talbott Date: 2003-08-08T09:36:48+09:00 Subject: DRb & OpenSSL... more info Found some more interesting info... When I include the following file (based on why's patch) in the s.rb and c.rb scripts I sent in [ruby-talk:78251]: File: patch.rb require 'openssl/buffering' module Buffering BLOCK_SIZE = 4096 private def fill_rbuff @rbuffer = "" unless defined? @rbuffer begin if self.respond_to?(:to_io) IO.select([self.to_io], nil, nil, 1.5) end @rbuffer << self.sysread(BLOCK_SIZE) rescue EOFError @eof = true end end end I get the following output: c.rb (this now works, although there's an obvious pause waiting for the timeout): ntalbott@proxytest:~$ ruby c.rb drbssl://localhost:5777 ./patch.rb:4: warning: already initialized constant BLOCK_SIZE Connected to drbssl://localhost:5777 3 500000 s.rb: ntalbott@proxytest:~$ ruby s.rb drbssl://localhost:5777 ./patch.rb:4: warning: already initialized constant BLOCK_SIZE ............................++++++++++++ ....++++++++++++ Listening on drbssl://localhost:5777 Called #small Called #large # /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:104:in `load' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:131:in `recv_request' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:283:in `recv_request' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:663:in `init_with_client' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:675:in `setup_message' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:648:in `perform' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:715:in `main_loop' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:711:in `loop' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:729:in `main_loop' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:707:in `start' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:707:in `main_loop' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:599:in `run' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:596:in `start' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:596:in `run' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:549:in `initialize' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:737:in `new' /usr/lib/ruby/site_ruby/1.8/drb/drb.rb:737:in `start_service' s.rb:23 (The server keeps running, and will accept more requests from the client) My guess? That the server finishes servicing the request, but the client doesn't think it's done yet. The client then sends a bit more data (as part of the SSL session that they're running over) to check if there's anything else. The server, thinking it's done, interprets this as another request. This has the result that both client and server hang, the server waiting for the rest of the new request, and the client waiting for the server to say the original request is done. Maybe. Does that make any sense? Thanks, Nathaniel <:((><