diff options
Diffstat (limited to 'lib/yahns/openssl_client.rb')
-rw-r--r-- | lib/yahns/openssl_client.rb | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/lib/yahns/openssl_client.rb b/lib/yahns/openssl_client.rb index cd7d210..30ac0e0 100644 --- a/lib/yahns/openssl_client.rb +++ b/lib/yahns/openssl_client.rb @@ -36,18 +36,15 @@ module Yahns::OpenSSLClient # :nodoc: def yahns_init_ssl(ssl_ctx) @need_accept = true @ssl = OpenSSL::SSL::SSLSocket.new(self, ssl_ctx) - @ssl_blocked = nil end def kgio_trywrite(buf) - buf = @ssl_blocked = buf.dup case rv = @ssl.write_nonblock(buf, exception: false) when :wait_readable, :wait_writable - return rv # do not clear ssl_blocked + return rv when Integer rv = buf.bytesize == rv ? nil : buf.byteslice(rv, buf.bytesize - rv) end - @ssl_blocked = nil rv end @@ -75,22 +72,14 @@ module Yahns::OpenSSLClient # :nodoc: def trysendfile(io, offset, count) return 0 if count == 0 - unless buf = @ssl_blocked - count = 0x4000 if count > 0x4000 - buf = Thread.current[:yahns_sfbuf] ||= ''.dup - io.pos = offset - buf = io.read(count, buf) or return # nil for EOF - buf = @ssl_blocked = buf.dup - end + count = 0x4000 if count > 0x4000 + buf = Thread.current[:yahns_sfbuf] ||= ''.dup + io.pos = offset + buf = io.read(count, buf) or return # nil for EOF # call write_nonblock directly since kgio_trywrite allocates # an unnecessary string - case rv = @ssl.write_nonblock(buf, exception: false) - when :wait_readable, :wait_writable - return rv # do not clear ssl_blocked - end - @ssl_blocked = nil - rv + @ssl.write_nonblock(buf, exception: false) end def close |