+<h2>mach_msg_header</h2>
+<hr>
+<p>
+<strong>Structure</strong> - Specifies the content of an IPC message header.
+<h3>SYNOPSIS</h3>
+<pre>
+<strong>typedef struct</strong>
+<strong>{</strong>
+ <strong>mach_msg_bits_t </strong> <var>msgh_bits</var><strong>;</strong>
+ <strong>mach_msg_size_t</strong> <var>msgh_size</var><strong>;</strong>
+ <strong>mach_port_t</strong> <var>msgh_remote_port</var><strong>;</strong>
+ <strong>mach_port_t</strong> <var>msgh_local_port</var><strong>;</strong>
+ <strong>mach_msg_size_t</strong> <var>msgh_reserved</var><strong>;</strong>
+ <strong>mach_msg_id_t</strong> <var>msgh_id</var><strong>;</strong>
+<strong>} mach_msg_header_t;</strong>
+
+<strong>typedef struct</strong>
+<strong>{</strong>
+ <strong>mach_msg_size_t</strong> <var>msgh_descriptor_count</var><strong>;</strong>
+<strong>} mach_msg_body_t;</strong>
+
+<strong>typedef struct</strong>
+<strong>{</strong>
+ <strong>mach_msg_trailer_type_t</strong> <var>msgh_trailer_type</var><strong>;</strong>
+ <strong>mach_msg_trailer_size_t</strong> <var>msgh_trailer_size</var><strong>;</strong>
+<strong>} mach_msg_trailer_t;</strong>
+
+<strong>typedef struct</strong>
+<strong>{</strong>
+ <strong>mach_msg_trailer_type_t</strong> <var>msgh_trailer_type</var><strong>;</strong>
+ <strong>mach_msg_trailer_size_t</strong> <var>msgh_trailer_size</var><strong>;</strong>
+ <strong>mach_port_seqno_t</strong> <var>msgh_seqno</var><strong>;</strong>
+<strong>} mach_msg_seqno_trailer_t;</strong>
+
+<strong>typedef struct</strong>
+<strong>{</strong>
+ <strong>mach_msg_trailer_type_t</strong> <var>msgh_trailer_type</var><strong>;</strong>
+ <strong>mach_msg_trailer_size_t</strong> <var>msgh_trailer_size</var><strong>;</strong>
+ <strong>mach_port_seqno_t</strong> <var>msgh_seqno</var><strong>;</strong>
+ <strong>security_token_t</strong> <var>msgh_sender</var><strong>;</strong>
+<strong>} mach_msg_security_trailer_t;</strong>
+
+<strong>typedef struct</strong>
+<strong>{</strong>
+ <strong>mach_msg_trailer_type_t</strong> <var>msgh_trailer_type</var><strong>;</strong>
+ <strong>mach_msg_trailer_size_t</strong> <var>msgh_trailer_size</var><strong>;</strong>
+ <strong>mach_port_seqno_t</strong> <var>msgh_seqno</var><strong>;</strong>
+ <strong>security_token_t</strong> <var>msgh_sender</var><strong>;</strong>
+ <strong>unsigned int</strong> <var>dipc_sender_kmsg</var><strong>;</strong>
+<strong>} mach_msg_dipc_trailer_t;</strong>
+</pre>
+<h3>FIELDS</h3>
+<dl>
+<dt> <var>msgh_bits</var>
+<dd>
+This field specifies the following properties of the message:
+<dl>
+ <p>
+<dt> <strong>MACH_MSGH_BITS_REMOTE_MASK</strong>
+<dd>
+Encodes <var>mach_msg_type_name_t</var> values that specify the port
+rights in the <var>msgh_remote_port</var> field. The value must specify
+a send or send-once right for the destination of the message.
+ <p>
+<dt> <strong>MACH_MSGH_BITS_LOCAL_MASK</strong>
+<dd>
+Encodes <var>mach_msg_type_name_t</var> values that specify the port
+rights in the <var>msgh_local_port</var> field. If the value doesn't
+specify a send or send-once right for the message's reply port, it
+must be zero and <var>msgh_local_port</var> must be <strong>MACH_PORT_NULL</strong>.
+ <p>
+<dt> <strong>MACH_MSGH_BITS_COMPLEX</strong>
+<dd>
+The complex bit must be specified if the message body
+contains additional port rights or out-of-line memory regions.
+ <p>
+<dt> <strong>MACH_MSGH_BITS_REMOTE</strong>(<var>bits</var>)
+<dd>
+This macro returns the appropriate <var>mach_msg_type_name_t</var>
+values, given a <var>msgh_bits</var> value.
+ <p>
+<dt> <strong>MACH_MSGH_BITS_LOCAL</strong>(<var>bits</var>)
+<dd>
+This macro returns the appropriate <var>mach_msg_type_name_t</var>
+values, given a <var>msgh_bits</var> value.
+ <p>
+<dt> <strong>MACH_MSGH_BITS</strong>(<var>remote</var>, <var>local</var>)
+<dd>
+This macro constructs a value for <var>msgh_bits</var>, given two
+<var>mach_msg_type_name_t</var> values.
+</dl>
+<p>
+<dt> <var>msgh_size</var>
+<dd>
+This field is ignored on send (the size to send is specified by the
+<var>send_size</var> parameter to <strong>mach_msg</strong>); the field is set on
+receive to the sum of
+the message header and body sizes (in bytes). Note that this value may
+be different from the send size specified by the sender if the sender and
+receiver machines have differing sizes for port names, memory
+addresses or memory range sizes.
+ <p>
+<dt> <var>msgh_remote_port</var>
+<dd>
+When sending, specifies the destination port of the message. The field
+must carry a legitimate send or send-once right for a port. When
+received, this field is swapped with <var>msgh_local_port</var>.
+ <p>
+<dt> <var>msgh_local_port</var>
+<dd>
+When sending, specifies an auxiliary port right, which is
+conventionally used as a reply port by the recipient of the message.
+The field must
+carry a send right, a send-once right, <strong>MACH_PORT_NULL</strong>, or
+<strong>MACH_PORT_DEAD</strong>. When received, this field is swapped with
+<var>msgh_remote_port</var>.
+ <p>
+<dt> <var>msgh_id</var>
+<dd>
+Not set or read by the <strong>mach_msg</strong> call. The conventional meaning is to
+convey an operation or function ID.
+ <p>
+<dt> <var>msgh_descriptor_count</var>
+<dd>
+The number of descriptors of kernel processed data (port rights and
+out-of-line data).
+ <p>
+<dt> <var>msgh_trailer_type</var>
+<dd>
+An identifier of the trailer version. Different values indicate not
+necessarily compatible trailer formats. The current (and only) trailer format
+is <strong>MACH_MSG_TRAILER_FORMAT_0</strong>. There is currently only one
+attribute defined within this trailer type: the sender's identity.
+ <p>
+<dt> <var>msgh_trailer_size</var>
+<dd>
+The length, in bytes, of the message trailer, including the trailer type
+and length fields.
+ <p>
+<dt> <var>msgh_seqno</var>
+<dd>
+The sequence number of this message relative to the port from which it
+is received.
+ <p>
+<dt> <var>msgh_sender</var>
+<dd>
+The security ID of the sender of the message.
+</dl>
+<h3>DESCRIPTION</h3>
+<p>
+The <strong>mach_msg_header</strong> structure defines the fixed size header of a Mach
+message. The header is followed by a message body containing data and port
+descriptors and zero or more data bytes.
+<p>
+If the <strong>MACH_MSGH_BITS_COMPLEX</strong> flag in the <var>msgh_bits</var> field is not set,
+then this is a simple message described by <strong>mach_msg_header_t</strong>.
+In this case, the header is immediately followed by untyped data.
+<p>
+If the complex flag is set, then this is a "complex" message consisting of a
+<strong>mach_msg_header_t</strong> structure followed by a <strong>mach_msg_body_t</strong> structure
+containing a count followed by an array of descriptors specifying
+the disposition
+(processing) to be performed for the out-of-line memory regions and additional
+port rights.
+<p>
+Following the header (and any kernel processed descriptors), at natural
+alignment can be additional (un-typed) data, up to the size of the message
+(<var>msgh_size</var>). This extra data typically carries information
+used to decode the data stream and out-of-line data.
+<p>
+At the next natural boundary following the message data is the message trailer
+(<strong>mach_msg_trailer_t</strong>). This structure indicates the type and length of the
+trailer. If the length is greater than sizeof (<strong>mach_msg_trailer_t</strong>),
+additional fields
+follow providing kernel-generated message attributes.
+<h3>RELATED INFORMATION</h3>
+<p>
+Functions:
+<a href="mach_msg.html"><strong>mach_msg</strong></a>.
+<p>
+Data Structures:
+<a href="mach_msg_descriptor.html"><strong>mach_msg_descriptor</strong></a>.
+