diff --git a/lib/openssl/buffering.rb b/lib/openssl/buffering.rb index 9570f14f3..e1e507a34 100644 --- a/lib/openssl/buffering.rb +++ b/lib/openssl/buffering.rb @@ -345,15 +345,17 @@ def do_write(s) @wbuffer << s @wbuffer.force_encoding(Encoding::BINARY) @sync ||= false - if @sync or @wbuffer.size > BLOCK_SIZE - until @wbuffer.empty? + buffer_size = @wbuffer.size + if @sync or buffer_size > BLOCK_SIZE + nwrote = 0 + while nwrote < buffer_size do begin - nwrote = syswrite(@wbuffer) + nwrote += syswrite(@wbuffer) rescue Errno::EAGAIN retry end - @wbuffer[0, nwrote] = "" end + @wbuffer[0, nwrote] = "" end end