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):

ntalbottproxytest:~$ ruby c.rb drbssl://localhost:5777
./patch.rb:4: warning: already initialized constant BLOCK_SIZE
Connected to drbssl://localhost:5777
3
500000

s.rb:

ntalbottproxytest:~$ ruby s.rb drbssl://localhost:5777
./patch.rb:4: warning: already initialized constant BLOCK_SIZE
............................++++++++++++
....++++++++++++
Listening on drbssl://localhost:5777
Called #small
Called #large
#<DRb::DRbConnError: connection closed>
/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

<:((><