diff options
author | Eric Wong <e@80x24.org> | 2015-12-13 02:13:56 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-12-13 02:13:56 +0000 |
commit | 02f5f5b0536e668773546b52a8b3bca16fee68f0 (patch) | |
tree | 3e757e413781022c403f13fca3aa794b12905dee /lib | |
parent | 5464516486d0ac08406c956b93d3d71e0310837b (diff) | |
download | yahns-02f5f5b0536e668773546b52a8b3bca16fee68f0.tar.gz |
Ruby 2.3 will support this feature to reduce allocations for common errors.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/yahns/openssl_client.rb | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/lib/yahns/openssl_client.rb b/lib/yahns/openssl_client.rb index ffa4b3e..246b407 100644 --- a/lib/yahns/openssl_client.rb +++ b/lib/yahns/openssl_client.rb @@ -53,14 +53,9 @@ module Yahns::OpenSSLClient # :nodoc: if @need_accept # most protocols require read before write, so we start the negotiation # process here: - begin - @ssl.accept_nonblock - rescue IO::WaitReadable - return :wait_readable - rescue IO::WaitWritable - return :wait_writable - rescue OpenSSL::SSL::SSLError - return nil + case rv = accept_nonblock(@ssl) + when :wait_readable, :wait_writable, nil + return rv end @need_accept = false end @@ -71,4 +66,20 @@ module Yahns::OpenSSLClient # :nodoc: @ssl.close # flushes SSLSocket super # IO#close end + + if RUBY_VERSION.to_f >= 2.3 + def accept_nonblock(ssl) + ssl.accept_nonblock(exception: false) + end + else + def accept_nonblock(ssl) + ssl.accept_nonblock + rescue IO::WaitReadable + :wait_readable + rescue IO::WaitWritable + :wait_writable + rescue OpenSSL::SSL::SSLError + nil + end + end end |