The idiomatic way of parsing and constructing ancillary data in C is to use the various macros defined in sys/socket.h (CMSG_FIRSTHDR, CMSG_NXTHDR etc.). Those macros act on msghdr directly. Since we no longer return msghdr in the API, we should serialize/deserialize these messages for the user in the API as well.