From c66ef25c7dfd0c2a3c4a8aa8eea223fa186c2311 Mon Sep 17 00:00:00 2001
From: Garrett D'Amore <garrett@damore.org>
Date: Sat, 14 Apr 2018 11:50:43 -0700
Subject: fixes #303 Flesh out compatible API docs

---
 docs/man/nn_cmsg.3compat.adoc | 77 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 docs/man/nn_cmsg.3compat.adoc

(limited to 'docs/man/nn_cmsg.3compat.adoc')

diff --git a/docs/man/nn_cmsg.3compat.adoc b/docs/man/nn_cmsg.3compat.adoc
new file mode 100644
index 00000000..c5347a12
--- /dev/null
+++ b/docs/man/nn_cmsg.3compat.adoc
@@ -0,0 +1,77 @@
+= nn_cmsg(3compat)
+//
+// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2018 Capitar IT Group BV <info@capitar.com>
+//
+// This document is supplied under the terms of the MIT License, a
+// copy of which should be located in the distribution where this
+// file was obtained (LICENSE.txt).  A copy of the license may also be
+// found online at https://opensource.org/licenses/MIT.
+//
+
+== NAME
+
+nn_cmsg - message control data (compatible API)
+
+== SYNOPSIS
+
+[source,c]
+----
+#include <nanomsg/nn.h>
+
+struct nn_cmsghdr {
+    size_t cmsg_len;
+    int    cmsg_level;
+    int    cmsg_type;
+};
+----
+
+== DESCRIPTION
+
+The `nn_cmsghdr` structure describes a block of control data that is
+associated with a message either sent by `<<nn_sendmsg.3compat#,nn_sendmsg()>>`
+or received by `<<nn_recvmsg.3compat#,nn_recvmsg()>>`.
+
+NOTE: This structure and supporting macros are provided for API
+<<nng_compat.3compat#,compatibility>> with legacy _libnanomsg_.
+Consider using the relevant <<libnng.3#,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 evalutes 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.
+
+== SEE ALSO
+
+<<nn_recvmsg.3compat#,nn_recvmsg(3compat)>>,
+<<nn_sendmsg.3compat#,nn_sendmsg(3compat)>>,
+<<nng_compat.3compat#,nng_compat(3compat)>>,
+<<nng.7#,nng(7)>>
-- 
cgit v1.2.3-70-g09d2

