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
).