diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-03-19 15:31:24 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-03-19 15:31:24 +0000 |
commit | 2208c990e19f9c372978457a636c8814deea77c5 (patch) | |
tree | 238d8acafa5227c2186f441f782658a31fb810f1 /ext/openssl | |
parent | 758f9510a61ee4e7914ff1dae7046a6737029776 (diff) | |
download | ruby-2208c990e19f9c372978457a636c8814deea77c5.tar.gz |
update rdoc and NEWS.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23010 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/openssl')
-rw-r--r-- | ext/openssl/lib/openssl/buffering.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/ext/openssl/lib/openssl/buffering.rb b/ext/openssl/lib/openssl/buffering.rb index 10d7b9d3b8..8e67fd7e83 100644 --- a/ext/openssl/lib/openssl/buffering.rb +++ b/ext/openssl/lib/openssl/buffering.rb @@ -100,6 +100,37 @@ module Buffering ret end + # Reads at most _maxlen_ bytes in the non-blocking manner. + # + # When no data can be read without blocking, + # It raises OpenSSL::SSL::SSLError extended by + # IO::WaitReadable or IO::WaitWritable. + # + # IO::WaitReadable means SSL needs to read internally. + # So read_nonblock should be called again after + # underlying IO is readable. + # + # IO::WaitWritable means SSL needs to write internally. + # So read_nonblock should be called again after + # underlying IO is writable. + # + # So OpenSSL::Buffering#read_nonblock needs two rescue clause as follows. + # + # begin + # result = ssl.read_nonblock(maxlen) + # rescue IO::WaitReadable + # IO.select([io]) + # retry + # rescue IO::WaitWritable + # IO.select(nil, [io]) + # retry + # end + # + # Note that one reason that read_nonblock write to a underlying IO + # is the peer requests a new TLS/SSL handshake. + # See openssl FAQ for more details. + # http://www.openssl.org/support/faq.html + # def read_nonblock(maxlen, buf=nil) if maxlen == 0 if buf |