Problem reconnecting an ssl client, the ssl ruby daemon hang


#1

Hi,
I have an Lua SSL client. The first time it connects, all is fine. But
then, I kill the client. Reconnect it. After a few commands, when more
datas are sent:

/usr/lib/ruby/1.8/openssl/buffering.rb:178: warning: error on stack:

error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry

Exception `OpenSSL::SSL::SSLError’ at

/usr/lib/ruby/1.8/openssl/buffering.rb:178 - SSL_write:: error:

1409F07F:SSL

routines:SSL3_WRITE_PENDING:bad write retry

It’s complety reproductible. Anybody has an idea ?

Thanks, regards.

Leo


Ruby (pseudo) code I use:

# SSL key and cert
key = OpenSSL::PKey::RSA.new 512
cert = OpenSSL::X509::Certificate.new
cert.not_before = Time.now
cert.not_after = Time.now + 3600
cert.public_key = key.public_key
cert.sign key, OpenSSL::Digest::SHA1.new

# SSL context
$ctx = OpenSSL::SSL::SSLContext.new
$ctx.key = key
$ctx.cert = cert

tcp_server = TCPserver.new $port
server = OpenSSL::SSL::SSLServer.new tcp_server, $ctx

while true
socket = server.accept

thread.new socket do |so|
while true
begin
send-receive work
rescue
socket.close
end
end
end
end


#2

On Thu, May 17, 2007 at 01:35:04AM +0900, removed_email_address@domain.invalid wrote:

routines:SSL3_WRITE_PENDING:bad write retry

It’s complety reproductible. Anybody has an idea ?

Perhaps you need to make a new SSL context for each incoming connection?
After all, each client will start a fresh SSL negotiation.