Note that while length always reflects the full length of the message body, data is normally null,
and will only be filled in after flatten is called. For client-side messages,
this automatically happens for the response body after it has been fully read, unless you set the
OVERWRITE_CHUNKS flags. Likewise, for server-side messages, the
request body is automatically filled in after being read.
As an added bonus, when data is filled in, it is always terminated with a '\0' byte (which is not reflected in length
).