XXX If the length in the packet header doesn't agree with the
actual number of bytes read, it should probably return an error
value.  Also, callers of this method never use the length
returned -- should probably return true/false instead.