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.