Use io.ReadFull to get an error if fewer bytes were read