Method: Rex::IO::RingBuffer::Stream#read

Defined in:
lib/rex/io/ring_buffer.rb

#read(len = nil) ⇒ Object



249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
# File 'lib/rex/io/ring_buffer.rb', line 249

def read(len=nil)
  if len and self.buff.length >= len
    data = self.buff.slice!(0,len)
    return data
  end

  while true
    lseq, data = self.ring.read_data( self.seq )
    return if not lseq

    self.seq  = lseq
    self.buff << data
    if len
      if self.buff.length >= len
        return self.buff.slice!(0,len)
      else
        IO.select(nil, nil, nil, 0.25)
        next
      end
    end

    data = self.buff
    self.buff = ''

    return data

    # Not reached
    break
  end

end