I am using http-access2 to interface with with a system over HTTPS. If I made a connection that supported keepalives and then waited until the remote server closed the connection, I would get uncaught exceptions on the next request. I patched the code for the errors I was getting, the patch is attached below. Here are various exceptions I got when keepalives expired:
OpenSSL::SSL::SSLError: SSL_write:: bad write retry
from /usr/lib/ruby/1.8/openssl/buffering.rb:178:in `syswrite'
from /usr/lib/ruby/1.8/openssl/buffering.rb:178:in `do_write'
from /usr/lib/ruby/1.8/openssl/buffering.rb:231:in `flush'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1059:in `flush'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1238:in `close'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:894:in `query'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:434:in `do_get_block'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:370:in `conn_request'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:285:in `request'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:260:in `get'
Errno::ECONNRESET: Connection reset by peer
from /usr/lib/ruby/1.8/openssl/buffering.rb:178:in `syswrite'
from /usr/lib/ruby/1.8/openssl/buffering.rb:178:in `do_write'
from /usr/lib/ruby/1.8/openssl/buffering.rb:192:in `write'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1053:in `<<'
from /usr/lib/ruby/site_ruby/1.8/http-access2/http.rb:179:in `dump'
from /usr/lib/ruby/site_ruby/1.8/http-access2/http.rb:386:in `dump'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1213:in `query'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1211:in `timeout'
from /usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1211:in `query'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:892:in `query'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:434:in `do_get_block'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:370:in `conn_request'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:285:in `request'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:260:in `get'
IOError: closed stream
from /usr/lib/ruby/1.8/openssl/buffering.rb:178:in `syswrite'
from /usr/lib/ruby/1.8/openssl/buffering.rb:178:in `do_write'
from /usr/lib/ruby/1.8/openssl/buffering.rb:231:in `flush'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1059:in `flush'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:1239:in `close'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:894:in `query'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:434:in `do_get_block'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:370:in `conn_request'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:285:in `request'
from /usr/lib/ruby/site_ruby/1.8/http-access2.rb:260:in `get'