1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
# frozen_string_literal: true
module Puma
module MiniSSL
class Socket
def read_nonblock(size, *_)
wait_states = %i[wait_readable wait_writable]
loop do
output = engine_read_all
return output if output
data = @socket.read_nonblock(size, exception: false)
raise IO::EAGAINWaitReadable if wait_states.include? data
return nil if data.nil?
@engine.inject(data)
output = engine_read_all
return output if output
while (neg_data = @engine.extract)
@socket.write neg_data
end
end
end
end
end
end
|