Stylistically, I think that this check should probably move into recv instead of _read_bytes (i.e. give this method less responsibility)