there still has to be a parameter to receive the length, because (for example) a close might have occurred while trying to accumulate the target number of bytes.