read_nonblock

in lib/puma/minissl.rb [49:82]


      def read_nonblock(size, *_)
        
        
        while true
          output = engine_read_all
          return output if output

          data = @socket.read_nonblock(size, exception: false)
          if data == :wait_readable || data == :wait_writable
            
            
            
            
            
            
            
            
            
            raise IO::EAGAINWaitReadable
          elsif data.nil?
            return nil
          end

          @engine.inject(data)
          output = engine_read_all

          return output if output

          while neg_data = @engine.extract
            @socket.write neg_data
          end
        end
      end