keep track of packet read sizes

When reads arrive at the do_read function, keep a queue of the byte count
for each read. This often (but not always) allows the receiver to read the
data in packets similar to those sent from the sending side.