class Net::BufferedIO

def read(len, dest = ''.b, ignore_eof = false)

def read(len, dest = ''.b, ignore_eof = false)
  LOG "reading #{len} bytes..."
  read_bytes = 0
  begin
    while read_bytes + rbuf_size < len
      if s = rbuf_consume_all
        read_bytes += s.bytesize
        dest << s
      end
      rbuf_fill
    end
    s = rbuf_consume(len - read_bytes)
    read_bytes += s.bytesize
    dest << s
  rescue EOFError
    raise unless ignore_eof
  end
  LOG "read #{read_bytes} bytes"
  dest
end