This documentation is for version v1.3.0 of NNG, but the latest released version is v1.8.0. see the documentation for v1.8.0 for the most up-to-date information.


#include <nanomsg/nn.h>

struct nn_cmsghdr {
size_t cmsg_len;
int    cmsg_level;
int    cmsg_type;


The nn_cmsghdr structure describes a block of control data that is associated with a message either sent by nn_sendmsg() or received by nn_recvmsg().

This structure and supporting macros are provided for API compatibility with legacy libnanomsg. Consider using the relevant modern API instead.

Each header is followed by cmsg_len bytes of data, plus any padding required to align the structure.

The only defined ancillary data at this time is the protocol headers used by the protocols. This uses cmsg_level set to PROTO_SP and the cmsg_type set to SP_HDR. The actual data for this will vary from depending on the protocol used.

Convenience macros are provided to make working with these fields easier.

struct nn_cmsghdr *NN_CMSG_FIRSTHDR(struct nn_msghdr *hdr)

This macro returns the first struct nn_cmsghdr header in hdr.

struct nn_cmsghdr *NN_CMSG_NXTHDR(struct nn_msghdr *hdr, struct nn_cmsghdr *ch)

This macro returns a pointer to the next struct nn_cmsghdr in hdr after ch.

void *NN_CMSG_DATA(struct nn_cmsghdr *ch)

This macro returns a pointer to the header-specific data for ch.

size_t NN_CMSG_ALIGN(size_t len)

This macro returns the length specified by len, plus any padding required to provide the necessary alignment for another structure.

size_t NN_CMSG_SPACE(size_t len)

This macro returns the amount of space required for a header, with len bytes of following data, and any necessary padding.

size_t NN_CMSG_LEN(size_t len)

This macro evaluates to the length of the header (including alignment), and the associated data of length len, but without any trailing padding to align for another header.