#include <endian.h>

struct msghdr {
    void* msg_name;
    socklen_t msg_namelen;
    struct iovec* msg_iov;
#if __BYTE_ORDER == __BIG_ENDIAN
    int __pad1, msg_iovlen;
#else
    int msg_iovlen, __pad1;
#endif
    void* msg_control;
#if __BYTE_ORDER == __BIG_ENDIAN
    int __pad2;
    socklen_t msg_controllen;
#else
    socklen_t msg_controllen;
    int __pad2;
#endif
    int msg_flags;
};

struct cmsghdr {
#if __BYTE_ORDER == __BIG_ENDIAN
    int __pad1;
    socklen_t cmsg_len;
#else
    socklen_t cmsg_len;
    int __pad1;
#endif
    int cmsg_level;
    int cmsg_type;
};