Method: Rackup::Stream::Reader#read_nonblock

Defined in:
lib/rackup/stream.rb

#read_nonblock(length, buffer = nil) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/rackup/stream.rb', line 105

def read_nonblock(length, buffer = nil)
  @buffer ||= read_next
  chunk = nil

  unless @buffer
    buffer&.clear
    return
  end

  if @buffer.bytesize > length
    chunk = @buffer.byteslice(0, length)
    @buffer = @buffer.byteslice(length, @buffer.bytesize)
  else
    chunk = @buffer
    @buffer = nil
  end

  if buffer
    buffer.replace(chunk)
  else
    buffer = chunk
  end

  return buffer
end