Before we dive into the individual messages, however, it's worth pointing out that the connect functions all have an identical message structure (rearranged slightly, see <sys/iomsg.h> for the original):
struct _io_connect {
// Internal use
uint16_t type;
uint16_t subtype;
uint32_t file_type;
uint16_t reply_max;
uint16_t entry_max;
uint32_t key;
uint32_t handle;
uint32_t ioflag;
uint32_t mode;
uint16_t sflag;
uint16_t access;
uint16_t zero;
uint8_t eflag;
// End-user parameters
uint16_t path_len;
uint8_t extra_type;
uint16_t extra_len;
char path [1];
};
You'll notice that I've divided the struct _io_connect structure into two areas, an "Internal use" part and an "End-user parameters" part.