summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-04-04 23:53:06 -0700
committerGarrett D'Amore <garrett@damore.org>2024-04-05 00:00:25 -0700
commit5fc6ec2d44e3372445ef4bf3bfb3fadc9d01dc94 (patch)
tree51bd752bcb819d0e3441759665c823477b514338
parentfded308be23375fc46af3255d45f4900d27d2ea0 (diff)
downloadnng-5fc6ec2d44e3372445ef4bf3bfb3fadc9d01dc94.tar.gz
nng-5fc6ec2d44e3372445ef4bf3bfb3fadc9d01dc94.tar.bz2
nng-5fc6ec2d44e3372445ef4bf3bfb3fadc9d01dc94.zip
Context functions converted.
-rw-r--r--docs/man/nng_ctx_close.3.adoc54
-rw-r--r--docs/man/nng_ctx_get.3.adoc131
-rw-r--r--docs/man/nng_ctx_getopt.3.adoc134
-rw-r--r--docs/man/nng_ctx_id.3.adoc51
-rw-r--r--docs/man/nng_ctx_open.3.adoc71
-rw-r--r--docs/man/nng_ctx_recv.3.adoc74
-rw-r--r--docs/man/nng_ctx_recvmsg.3.adoc63
-rw-r--r--docs/man/nng_ctx_send.3.adoc88
-rw-r--r--docs/man/nng_ctx_sendmsg.3.adoc84
-rw-r--r--docs/man/nng_ctx_set.3.adoc113
-rw-r--r--docs/man/nng_ctx_setopt.3.adoc114
-rw-r--r--docs/ref/ctx/nng_ctx_close.adoc35
-rw-r--r--docs/ref/ctx/nng_ctx_get.adoc102
-rw-r--r--docs/ref/ctx/nng_ctx_getopt.adoc43
-rw-r--r--docs/ref/ctx/nng_ctx_id.adoc29
-rw-r--r--docs/ref/ctx/nng_ctx_open.adoc39
-rw-r--r--docs/ref/ctx/nng_ctx_recv.adoc45
-rw-r--r--docs/ref/ctx/nng_ctx_recvmsg.adoc43
-rw-r--r--docs/ref/ctx/nng_ctx_send.adoc46
-rw-r--r--docs/ref/ctx/nng_ctx_sendmsg.adoc63
-rw-r--r--docs/ref/ctx/nng_ctx_set.adoc81
-rw-r--r--docs/ref/ctx/nng_ctx_setopt.adoc43
22 files changed, 569 insertions, 977 deletions
diff --git a/docs/man/nng_ctx_close.3.adoc b/docs/man/nng_ctx_close.3.adoc
deleted file mode 100644
index cfc51bfa..00000000
--- a/docs/man/nng_ctx_close.3.adoc
+++ /dev/null
@@ -1,54 +0,0 @@
-= nng_ctx_close(3)
-//
-// 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
-
-nng_ctx_close - close context
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_close(nng_ctx ctx);
-----
-
-== DESCRIPTION
-
-The `nng_ctx_close()` function closes the context _ctx_.
-Messages that have been submitted for sending may be flushed or delivered,
-depending upon the transport.
-
-Further attempts to use the context after this call returns will result
-in `NNG_ECLOSED`.
-Threads waiting for operations on the context when this
-call is executed may also return with an `NNG_ECLOSED` result.
-
-NOTE: Closing the socket associated with _ctx_
-(using xref:nng_close.3.adoc[`nng_close()`]) also closes this context.
-
-== RETURN VALUES
-
-This function returns 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_ECLOSED`:: The context _ctx_ is already closed or was never opened.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_ctx_open.3.adoc[nng_ctx_open(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_get.3.adoc b/docs/man/nng_ctx_get.3.adoc
deleted file mode 100644
index 48237b23..00000000
--- a/docs/man/nng_ctx_get.3.adoc
+++ /dev/null
@@ -1,131 +0,0 @@
-= nng_ctx_get(3)
-//
-// Copyright 2019 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
-
-nng_ctx_get - get context option
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_get(nng_ctx ctx, const char *opt, void *val, size_t *valszp);
-
-int nng_ctx_get_bool(nng_ctx ctx, const char *opt, bool *bvalp);
-
-int nng_ctx_get_int(nng_ctx ctx, const char *opt, int *ivalp);
-
-int nng_ctx_get_ms(nng_ctx ctx, const char *opt, nng_duration *durp);
-
-int nng_ctx_get_size(nng_ctx ctx, const char *opt, size_t *zp);
-
-int nng_ctx_get_string(nng_ctx ctx, const char *opt, char **strp);
-
-int nng_ctx_get_uint64(nng_ctx ctx, const char *opt, uint64_t *u64p);
-
-----
-
-== DESCRIPTION
-
-(((options, context)))
-The `nng_ctx_get()` functions are used to retrieve option values for
-the xref:nng_ctx.5.adoc[context] _ctx_.
-The actual options that may be retrieved in this way vary.
-A number of them are documented in xref:nng_options.5.adoc[nng_options(5)].
-
-NOTE: Context options are protocol specific.
-The details will be documented with the protocol.
-
-=== Forms
-
-In all of these forms, the option _opt_ is retrieved from the context _ctx_.
-The forms vary based on the type of the option they take.
-
-The details of the type, size, and semantics of the option will depend
-on the actual option, and will be documented with the option itself.
-
-`nng_ctx_get()`::
-This function is untyped and can be used to retrieve the value of any option.
-The caller must store a pointer to a buffer to receive the value in _val_,
-and the size of the buffer shall be stored at the location referenced by
-_valszp_. +
- +
-When the function returns, the actual size of the data copied (or that
-would have been copied if sufficient space were present) is stored at
-the location referenced by _valszp_.
-If the caller's buffer is not large enough to hold the entire object,
-then the copy is truncated.
-Therefore the caller should check for truncation by verifying that the
-returned size in _valszp_ does not exceed the original buffer size. +
- +
-It is acceptable to pass `NULL` for _val_ if the value in _valszp_ is zero.
-This can be used to determine the size of the buffer needed to receive
-the object.
-
-TIP: It may be easier to use one of the typed forms of this function.
-
-`nng_ctx_get_bool()`::
-This function is for options which take a Boolean (`bool`).
-The value will be stored at _ivalp_.
-
-`nng_ctx_get_int()`::
-This function is for options which take an integer (`int`).
-The value will be stored at _ivalp_.
-
-`nng_ctx_get_ms()`::
-This function is used to retrieve time xref:nng_duration.5.adoc[durations]
-(such as timeouts), stored in _durp_ as a number of milliseconds.
-(The special value ((`NNG_DURATION_INFINITE`)) means an infinite amount of time, and
-the special value ((`NNG_DURATION_DEFAULT`)) means a context-specific default.)
-
-`nng_ctx_get_size()`::
-This function is used to retrieve a size into the pointer _zp_,
-typically for buffer sizes, message maximum sizes, and similar options.
-
-`nng_ctx_get_string()`::
-This function is used to retrieve a string into _strp_.
-This string is created from the source using xref:nng_strdup.3.adoc[`nng_strdup()`]
-and consequently must be freed by the caller using
-xref:nng_strfree.3.adoc[`nng_strfree()`] when it is no longer needed.
-
-`nng_ctx_get_uint64()`::
-This function is used to retrieve a 64-bit unsigned value into the value
-referenced by _u64p_.
-This is typically used for options related to identifiers, network
-numbers, and similar.
-
-== RETURN VALUES
-
-These functions return 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_EBADTYPE`:: Incorrect type for option.
-`NNG_ECLOSED`:: Parameter _s_ does not refer to an open socket.
-`NNG_EINVAL`:: Size of destination _val_ too small for object.
-`NNG_ENOMEM`:: Insufficient memory exists.
-`NNG_ENOTSUP`:: The option _opt_ is not supported.
-`NNG_EWRITEONLY`:: The option _opt_ is write-only.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_ctx_set.3.adoc[nng_ctx_set(3)],
-xref:nng_strdup.3.adoc[nng_strdup(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_strfree.3.adoc[nng_strfree(3)],
-xref:nng_duration.5.adoc[nng_duration(5)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng_options.5.adoc[nng_options(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_getopt.3.adoc b/docs/man/nng_ctx_getopt.3.adoc
deleted file mode 100644
index 2214a3eb..00000000
--- a/docs/man/nng_ctx_getopt.3.adoc
+++ /dev/null
@@ -1,134 +0,0 @@
-= nng_ctx_getopt(3)
-//
-// Copyright 2020 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
-
-nng_ctx_getopt - get context option
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_getopt(nng_ctx ctx, const char *opt, void *val, size_t *valszp);
-
-int nng_ctx_getopt_bool(nng_ctx ctx, const char *opt, bool *bvalp);
-
-int nng_ctx_getopt_int(nng_ctx ctx, const char *opt, int *ivalp);
-
-int nng_ctx_getopt_ms(nng_ctx ctx, const char *opt, nng_duration *durp);
-
-int nng_ctx_getopt_size(nng_ctx ctx, const char *opt, size_t *zp);
-
-int nng_ctx_getopt_string(nng_ctx ctx, const char *opt, char **strp);
-
-int nng_ctx_getopt_uint64(nng_ctx ctx, const char *opt, uint64_t *u64p);
-
-----
-
-== DESCRIPTION
-
-IMPORTANT: These functions are deprecated. Please see xref:nng_ctx_get.3.adoc[nng_ctx_get].
-They may not be present if the library was built with `NNG_ELIDE_DEPRECATED`.
-
-(((options, context)))
-The `nng_ctx_getopt()` functions are used to retrieve option values for
-the xref:nng_ctx.5.adoc[context] _ctx_.
-The actual options that may be retrieved in this way vary.
-A number of them are documented in xref:nng_options.5.adoc[nng_options(5)].
-
-NOTE: Context options are protocol specific.
-The details will be documented with the protocol.
-
-=== Forms
-
-In all of these forms, the option _opt_ is retrieved from the context _ctx_.
-The forms vary based on the type of the option they take.
-
-The details of the type, size, and semantics of the option will depend
-on the actual option, and will be documented with the option itself.
-
-`nng_ctx_getopt()`::
-This function is untyped and can be used to retrieve the value of any option.
-The caller must store a pointer to a buffer to receive the value in _val_,
-and the size of the buffer shall be stored at the location referenced by
-_valszp_. +
- +
-When the function returns, the actual size of the data copied (or that
-would have been copied if sufficient space were present) is stored at
-the location referenced by _valszp_.
-If the caller's buffer is not large enough to hold the entire object,
-then the copy is truncated.
-Therefore the caller should check for truncation by verifying that the
-returned size in _valszp_ does not exceed the original buffer size. +
- +
-It is acceptable to pass `NULL` for _val_ if the value in _valszp_ is zero.
-This can be used to determine the size of the buffer needed to receive
-the object.
-
-TIP: It may be easier to use one of the typed forms of this function.
-
-`nng_ctx_getopt_bool()`::
-This function is for options which take a Boolean (`bool`).
-The value will be stored at _ivalp_.
-
-`nng_ctx_getopt_int()`::
-This function is for options which take an integer (`int`).
-The value will be stored at _ivalp_.
-
-`nng_ctx_getopt_ms()`::
-This function is used to retrieve time xref:nng_duration.5.adoc[durations]
-(such as timeouts), stored in _durp_ as a number of milliseconds.
-(The special value ((`NNG_DURATION_INFINITE`)) means an infinite amount of time, and
-the special value ((`NNG_DURATION_DEFAULT`)) means a context-specific default.)
-
-`nng_ctx_getopt_size()`::
-This function is used to retrieve a size into the pointer _zp_,
-typically for buffer sizes, message maximum sizes, and similar options.
-
-`nng_ctx_getopt_string()`::
-This function is used to retrieve a string into _strp_.
-This string is created from the source using xref:nng_strdup.3.adoc[`nng_strdup()`]
-and consequently must be freed by the caller using
-xref:nng_strfree.3.adoc[`nng_strfree()`] when it is no longer needed.
-
-`nng_ctx_getopt_uint64()`::
-This function is used to retrieve a 64-bit unsigned value into the value
-referenced by _u64p_.
-This is typically used for options related to identifiers, network
-numbers, and similar.
-
-== RETURN VALUES
-
-These functions return 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_EBADTYPE`:: Incorrect type for option.
-`NNG_ECLOSED`:: Parameter _s_ does not refer to an open socket.
-`NNG_EINVAL`:: Size of destination _val_ too small for object.
-`NNG_ENOMEM`:: Insufficient memory exists.
-`NNG_ENOTSUP`:: The option _opt_ is not supported.
-`NNG_EWRITEONLY`:: The option _opt_ is write-only.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_ctx_setopt.3.adoc[nng_ctx_setopt(3)],
-xref:nng_strdup.3.adoc[nng_strdup(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_strfree.3.adoc[nng_strfree(3)],
-xref:nng_duration.5.adoc[nng_duration(5)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng_options.5.adoc[nng_options(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_id.3.adoc b/docs/man/nng_ctx_id.3.adoc
deleted file mode 100644
index 51b833a8..00000000
--- a/docs/man/nng_ctx_id.3.adoc
+++ /dev/null
@@ -1,51 +0,0 @@
-= nng_ctx_id(3)
-//
-// 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
-
-nng_ctx_id - return numeric context identifier
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_id(nng_ctx c);
-----
-
-== DESCRIPTION
-
-The `nng_ctx_id()` function returns a positive identifier for the context _c_,
-if it is valid.
-Otherwise it returns `-1`.
-
-NOTE: A context is considered valid if it was ever opened with
-xref:nng_ctx_open.3.adoc[`nng_ctx_open()`] function.
-Contexts that are allocated on the stack or statically should be
-initialized with the macro
-xref:nng_ctx.5.adoc#NNG_CTX_INITIALIZER[`NNG_CTX_INITIALIZER`] to ensure that
-they cannot be confused with a valid context before they are opened.
-
-== RETURN VALUES
-
-This function returns the positive value for the context identifier, or
-`-1` if the context is invalid.
-
-== ERRORS
-
-None.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_open.3.adoc b/docs/man/nng_ctx_open.3.adoc
deleted file mode 100644
index 76842b7e..00000000
--- a/docs/man/nng_ctx_open.3.adoc
+++ /dev/null
@@ -1,71 +0,0 @@
-= nng_ctx_open(3)
-//
-// 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
-
-nng_ctx_open - create context
-
-== SYNOPSIS
-
-[source,c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_open(nng_ctx *ctxp, nng_socket s);
-----
-
-== DESCRIPTION
-
-The `nng_ctx_open()` function creates a separate ((context)) to be used with
-the socket _s_,
-and returns it at the location pointed by _ctxp_.
-
-NOTE: Not every protocol supports creation of separate contexts.
-
-Contexts allow the independent and concurrent use of stateful operations
-using the same socket.
-For example, two different contexts created on a xref:nng_rep.7.adoc[_rep_]
-socket can each receive requests, and send replies to them, without any
-regard to or interference with each other.
-
-(((raw mode)))
-TIP: Using contexts is an excellent way to write simpler concurrent
-applications, while retaining the benefits of the protocol-specific
-advanced processing, avoiding the need to bypass that with
-xref:nng.7.adoc#raw_mode[raw mode] sockets.
-
-NOTE: Use of contexts with xref:nng.7.adoc#raw_mode[raw mode] sockets is
-nonsensical, and not supported.
-
-== RETURN VALUES
-
-This function returns 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_ENOMEM`:: Insufficient memory is available.
-`NNG_ENOTSUP`:: The protocol does not support separate contexts, or the socket was opened in raw mode.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_ctx_close.3.adoc[nng_ctx_close(3)],
-xref:nng_ctx_getopt.3.adoc[nng_ctx_getopt(3)],
-xref:nng_ctx_recv.3.adoc[nng_ctx_recv(3)],
-xref:nng_ctx_send.3.adoc[nng_ctx_send(3)],
-xref:nng_ctx_setopt.3.adoc[nng_ctx_setopt(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng_socket.5.adoc[nng_socket(5)],
-xref:nng_rep.7.adoc[nng_rep(7)],
-xref:nng_req.7.adoc[nng_req(7)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_recv.3.adoc b/docs/man/nng_ctx_recv.3.adoc
deleted file mode 100644
index bb3d7cf6..00000000
--- a/docs/man/nng_ctx_recv.3.adoc
+++ /dev/null
@@ -1,74 +0,0 @@
-= nng_ctx_recv(3)
-//
-// 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
-
-nng_ctx_recv - receive message using context asynchronously
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-void nng_ctx_recv(nng_ctx ctx, nng_aio *aio);
-----
-
-== DESCRIPTION
-
-The `nng_ctx_recv()` receives a xref:nng_msg.5.adoc[message] using the
-xref:nng_ctx.5.adoc[context] _s_ asynchronously.
-
-When a message is successfully received by the context, it is
-stored in the _aio_ by an internal call equivalent to
-xref:nng_aio_set_msg.3.adoc[`nng_aio_set_msg()`], then the completion
-callback on the _aio_ is executed.
-In this case, xref:nng_aio_result.3.adoc[`nng_aio_result()`] will
-return zero.
-The callback function is responsible for retrieving the message
-and disposing of it appropriately.
-
-IMPORTANT: Failing to accept and dispose of messages in this
-case can lead to memory leaks.
-
-If for some reason the asynchronous receive cannot be completed
-successfully (including by being canceled or timing out), then
-the callback will still be executed,
-but xref:nng_aio_result.3.adoc[`nng_aio_result()`] will be non-zero.
-
-NOTE: The semantics of what receiving a message means varies from protocol to
-protocol, so examination of the protocol documentation is encouraged.
-
-== RETURN VALUES
-
-None. (The operation completes asynchronously.)
-
-== ERRORS
-
-[horizontal]
-`NNG_ECANCELED`:: The operation was aborted.
-`NNG_ECLOSED`:: The context _ctx_ is not open.
-`NNG_ENOMEM`:: Insufficient memory is available.
-`NNG_ENOTSUP`:: The protocol for context _ctx_ does not support receiving.
-`NNG_ESTATE`:: The context _ctx_ cannot receive data in this state.
-`NNG_ETIMEDOUT`:: The receive timeout expired.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_aio_get_msg.3.adoc[nng_aio_get_msg(3)],
-xref:nng_aio_set_msg.3.adoc[nng_aio_set_msg(3)],
-xref:nng_msg_alloc.3.adoc[nng_msg_alloc(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_aio.5.adoc[nng_aio(5)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng_msg.5.adoc[nng_msg(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_recvmsg.3.adoc b/docs/man/nng_ctx_recvmsg.3.adoc
deleted file mode 100644
index 9651c34c..00000000
--- a/docs/man/nng_ctx_recvmsg.3.adoc
+++ /dev/null
@@ -1,63 +0,0 @@
-= nng_ctx_recvmsg(3)
-//
-// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech>
-//
-// 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
-
-nng_ctx_recvmsg - receive message using socket
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_recvmsg(nng_ctx ctx, nng_msg **msgp, int flags);
-----
-
-== DESCRIPTION
-
-The `nng_ctx_recvmsg()` receives a message on context _ctx_, storing the
-received message at the location pointed to by _msgp_.
-
-The _flags_ may contain the following value:
-
-`NNG_FLAG_NONBLOCK`::
- The function returns immediately, even if no message is available.
- Without this flag, the function will wait until a message is receivable
- on the context _ctx_, or any configured timer expires.
-
-NOTE: The semantics of what receiving a message means vary from protocol to
-protocol, so examination of the protocol documentation is encouraged.
-
-== RETURN VALUES
-
-This function returns 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_EAGAIN`:: The operation would block, but `NNG_FLAG_NONBLOCK` was specified.
-`NNG_ECLOSED`:: The context or socket is not open.
-`NNG_EINVAL`:: An invalid set of _flags_ was specified.
-`NNG_ENOMEM`:: Insufficient memory is available.
-`NNG_ENOTSUP`:: The protocol does not support receiving.
-`NNG_ESTATE`:: The context cannot receive data in this state.
-`NNG_ETIMEDOUT`:: The operation timed out.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_msg_free.3.adoc[nng_msg_free(3)],
-xref:nng_ctx_open.3.adoc[nng_ctx_open(3)],
-xref:nng_ctx_recv.3.adoc[nng_ctx_recv(3)],
-xref:nng_ctx_sendmsg.3.adoc[nng_ctx_sendmsg(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_send.3.adoc b/docs/man/nng_ctx_send.3.adoc
deleted file mode 100644
index 8724c1aa..00000000
--- a/docs/man/nng_ctx_send.3.adoc
+++ /dev/null
@@ -1,88 +0,0 @@
-= nng_ctx_send(3)
-//
-// 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
-
-nng_ctx_send - send message using context asynchronously
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-void nng_ctx_send(nng_ctx ctx, nng_aio *aio);
-----
-
-== DESCRIPTION
-
-The `nng_ctx_send()` sends a xref:nng_msg.5.adoc[message] using the
-xref:nng_ctx.5.adoc[context] _ctx_ asynchronously.
-
-The message to send must have previously been set on the _aio_
-using the xref:nng_aio_set_msg.3.adoc[`nng_aio_set_msg()`] function.
-The function assumes ownership of the message.
-
-If the message was successfully queued for delivery to the socket,
-then the _aio_ will be completed, and xref:nng_aio_result.3.adoc[`nng_aio_result()`]
-will return zero.
-In this case the socket will dispose of the message when it is finished with it.
-
-NOTE: The operation will be completed, and the callback associated
-with the _aio_ executed, as soon as the socket accepts the message
-for sending.
-This does _not_ indicate that the message was actually delivered, as it
-may still be buffered in the sending socket, buffered in the receiving
-socket, or in flight over physical media.
-
-If the operation fails for any reason (including cancellation or timeout),
-then the _aio_ callback will be executed and
-xref:nng_aio_result.3.adoc[`nng_aio_result()`] will return a non-zero error status.
-In this case, the callback has a responsibility to retrieve the message from
-the _aio_ with xref:nng_aio_get_msg.3.adoc[`nng_aio_get_msg()`] and dispose of
-it appropriately.
-(This may include retrying the send operation on the same or a different
-socket, or deallocating the message with xref:nng_msg_free.3.adoc[`nng_msg_free()`].)
-
-NOTE: The semantics of what sending a message means varies from protocol to
-protocol, so examination of the protocol documentation is encouraged.
-
-TIP: Context send operations are asynchronous.
-If a synchronous operation is needed, one can be constructed by using a
-`NULL` callback on the _aio_ and then waiting for the operation using
-xref:nng_aio_wait.3.adoc[`nng_aio_wait()`].
-
-== RETURN VALUES
-
-None. (The operation completes asynchronously.)
-
-== ERRORS
-
-[horizontal]
-`NNG_ECANCELED`:: The operation was aborted.
-`NNG_ECLOSED`:: The context _ctx_ is not open.
-`NNG_EMSGSIZE`:: The message is too large.
-`NNG_ENOMEM`:: Insufficient memory is available.
-`NNG_ENOTSUP`:: The protocol for context _ctx_ does not support sending.
-`NNG_ESTATE`:: The context _ctx_ cannot send data in this state.
-`NNG_ETIMEDOUT`:: The send timeout expired.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_aio_get_msg.3.adoc[nng_aio_get_msg(3)],
-xref:nng_aio_set_msg.3.adoc[nng_aio_set_msg(3)],
-xref:nng_msg_alloc.3.adoc[nng_msg_alloc(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_aio.5.adoc[nng_aio(5)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng_msg.5.adoc[nng_msg(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_sendmsg.3.adoc b/docs/man/nng_ctx_sendmsg.3.adoc
deleted file mode 100644
index 8e2c97f4..00000000
--- a/docs/man/nng_ctx_sendmsg.3.adoc
+++ /dev/null
@@ -1,84 +0,0 @@
-= nng_ctx_sendmsg(3)
-//
-// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech>
-//
-// 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
-
-nng_ctx_sendmsg - send message using context
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_sendmsg(nng_ctx c, nng_msg *msg, int flags);
-----
-
-== DESCRIPTION
-
-The `nng_ctx_sendmsg()` sends message _msg_ using the context _ctx_.
-
-If the function returns zero, indicating it has accepted the message for
-delivery, then the _msg_ is owned by the socket _s_, and the caller
-must not make any further use of it.
-The socket will free the message when it is finished.
-
-If the function returns non-zero, then it is the caller's responsibility
-to dispose of the _msg_, which may include freeing it, sending it to
-another socket, or simply trying again later.
-
-NOTE: The semantics of what sending a message means vary from protocol to
-protocol, so examination of the protocol documentation is encouraged.
-
-The _flags_ may contain the following value:
-
-`NNG_FLAG_NONBLOCK`::
- The function returns immediately, regardless of whether
- the context is able to accept the data or not.
- If the context is unable to accept the data (such as if backpressure exists
- because the peers are consuming messages too slowly, or no peer is present),
- then the function will return with `NNG_EAGAIN`.
- If this flag is not specified, then the function will block if such a
- condition exists.
-
-
-NOTE: Regardless of the presence or absence of `NNG_FLAG_NONBLOCK`, there may
-be queues between the sender and the receiver.
-Furthermore, there is no guarantee that the message has actually been delivered.
-Finally, with some protocols, the semantic is implicitly `NNG_FLAG_NONBLOCK`.
-
-== RETURN VALUES
-
-This function returns 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_EAGAIN`:: The operation would block, but `NNG_FLAG_NONBLOCK` was specified.
-`NNG_ECLOSED`:: The context or socket is not open.
-`NNG_EINVAL`:: An invalid set of _flags_ was specified.
-`NNG_EMSGSIZE`:: The value of _size_ is too large.
-`NNG_ENOMEM`:: Insufficient memory is available.
-`NNG_ENOTSUP`:: The protocol does not support sending.
-`NNG_ESTATE`:: The context cannot send data in this state.
-`NNG_ETIMEDOUT`:: The operation timed out.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_msg_alloc.3.adoc[nng_msg_alloc(3)],
-xref:nng_ctx_open.3.adoc[nng_ctx_open(3)],
-xref:nng_ctx_recvmsg.3.adoc[nng_ctx_recvmsg(3)],
-xref:nng_ctx_send.3.adoc[nng_ctx_send(3)],
-xref:nng_sendmsg.3.adoc[nng_sendmsg(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_msg.5.adoc[nng_msg(5)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_set.3.adoc b/docs/man/nng_ctx_set.3.adoc
deleted file mode 100644
index 9bfeb43f..00000000
--- a/docs/man/nng_ctx_set.3.adoc
+++ /dev/null
@@ -1,113 +0,0 @@
-= nng_ctx_set(3)
-//
-// Copyright 2019 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
-
-nng_ctx_set - set context option
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_set(nng_ctx ctx, const char *opt, const void *val, size_t valsz);
-
-int nng_ctx_set_bool(nng_ctx ctx, const char *opt, int bval);
-
-int nng_ctx_set_int(nng_ctx ctx, const char *opt, int ival);
-
-int nng_ctx_set_ms(nng_ctx ctx, const char *opt, nng_duration dur);
-
-int nng_ctx_set_size(nng_ctx ctx, const char *opt, size_t z);
-
-int nng_ctx_set_string(nng_ctx ctx, const char *opt, const char *str);
-
-int nng_ctx_set_uint64(nng_ctx ctx, const char *opt, uint64_t u64);
-----
-
-== DESCRIPTION
-
-NOTE: These functions are deprecated. Please see xref:nng_ctx_set.3.adoc[nng_ctx_set].
-
-(((options, context)))
-The `nng_ctx_set()` functions are used to configure options for
-the context _ctx_.
-The actual options that may be configured in this way vary, and are
-specified by _opt_.
-
-NOTE: Context options are protocol specific.
-The details will be documented with the protocol.
-
-=== Forms
-
-The details of the type, size, and semantics of the option will depend
-on the actual option, and will be documented with the option itself.
-
-`nng_ctx_set()`::
-This function is untyped, and can be used to configure any arbitrary data.
-The _val_ pointer addresses the data to copy, and _valsz_ is the
-size of the objected located at _val_.
-
-TIP: It may be easier to use one of the typed forms of this function.
-
-`nng_ctx_set_bool()`::
-This function is for options which take a Boolean (`bool`).
-The _bval_ is passed to the option.
-
-`nng_ctx_set_int()`::
-This function is for options which take an integer (`int`).
-The _ival_ is passed to the option.
-
-`nng_ctx_set_ms()`::
-This function is used to configure time durations (such as timeouts) using
-type xref:nng_duration.5.adoc[`nng_duration`].
-The duration _dur_ is an integer number of milliseconds.
-
-`nng_ctx_set_size()`::
-This function is used to configure a size, _z_, typically for buffer sizes,
-message maximum sizes, and similar options.
-
-`nng_ctx_set_string()`::
-This function is used to pass configure a string, _str_.
-Strings passed this way must be legal UTF-8 or ASCII strings, terminated
-with a `NUL` (`\0`) byte.
-(Other constraints may apply as well, see the documentation for each option
-for details.)
-
-`nng_ctx_set_uint64()`::
-This function is used to configure a 64-bit unsigned value, _u64_.
-This is typically used for options related to identifiers, network numbers,
-and similar.
-
-== RETURN VALUES
-
-These functions return 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_ECLOSED`:: Parameter _s_ does not refer to an open socket.
-`NNG_EINVAL`:: The value being passed is invalid.
-`NNG_ENOTSUP`:: The option _opt_ is not supported.
-`NNG_EREADONLY`:: The option _opt_ is read-only.
-`NNG_ESTATE`:: The socket is in an inappropriate state for setting this option.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_ctx_get.3.adoc[nng_ctx_get(3)],
-xref:nng_socket_set.3.adoc[nng_socket_set(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng_options.5.adoc[nng_options(5)],
-xref:nng_socket.5.adoc[nng_socket(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_ctx_setopt.3.adoc b/docs/man/nng_ctx_setopt.3.adoc
deleted file mode 100644
index f6f7f9ef..00000000
--- a/docs/man/nng_ctx_setopt.3.adoc
+++ /dev/null
@@ -1,114 +0,0 @@
-= nng_ctx_setopt(3)
-//
-// Copyright 2020 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
-
-nng_ctx_setopt - set context option
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-int nng_ctx_setopt(nng_ctx ctx, const char *opt, const void *val, size_t valsz);
-
-int nng_ctx_setopt_bool(nng_ctx ctx, const char *opt, int bval);
-
-int nng_ctx_setopt_int(nng_ctx ctx, const char *opt, int ival);
-
-int nng_ctx_setopt_ms(nng_ctx ctx, const char *opt, nng_duration dur);
-
-int nng_ctx_setopt_size(nng_ctx ctx, const char *opt, size_t z);
-
-int nng_ctx_setopt_string(nng_ctx ctx, const char *opt, const char *str);
-
-int nng_ctx_setopt_uint64(nng_ctx ctx, const char *opt, uint64_t u64);
-----
-
-== DESCRIPTION
-
-IMPORTANT: These functions are deprecated. Please see xref:nng_ctx_set.3.adoc[nng_ctx_set].
-They may not be present if the library was built with `NNG_ELIDE_DEPRECATED`.
-
-(((options, context)))
-The `nng_ctx_setopt()` functions are used to configure options for
-the context _ctx_.
-The actual options that may be configured in this way vary, and are
-specified by _opt_.
-
-NOTE: Context options are protocol specific.
-The details will be documented with the protocol.
-
-=== Forms
-
-The details of the type, size, and semantics of the option will depend
-on the actual option, and will be documented with the option itself.
-
-`nng_ctx_setopt()`::
-This function is untyped, and can be used to configure any arbitrary data.
-The _val_ pointer addresses the data to copy, and _valsz_ is the
-size of the objected located at _val_.
-
-TIP: It may be easier to use one of the typed forms of this function.
-
-`nng_ctx_setopt_bool()`::
-This function is for options which take a Boolean (`bool`).
-The _bval_ is passed to the option.
-
-`nng_ctx_setopt_int()`::
-This function is for options which take an integer (`int`).
-The _ival_ is passed to the option.
-
-`nng_ctx_setopt_ms()`::
-This function is used to configure time durations (such as timeouts) using
-type xref:nng_duration.5.adoc[`nng_duration`].
-The duration _dur_ is an integer number of milliseconds.
-
-`nng_ctx_setopt_size()`::
-This function is used to configure a size, _z_, typically for buffer sizes,
-message maximum sizes, and similar options.
-
-`nng_ctx_setopt_string()`::
-This function is used to pass configure a string, _str_.
-Strings passed this way must be legal UTF-8 or ASCII strings, terminated
-with a `NUL` (`\0`) byte.
-(Other constraints may apply as well, see the documentation for each option
-for details.)
-
-`nng_ctx_setopt_uint64()`::
-This function is used to configure a 64-bit unsigned value, _u64_.
-This is typically used for options related to identifiers, network numbers,
-and similar.
-
-== RETURN VALUES
-
-These functions return 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_ECLOSED`:: Parameter _s_ does not refer to an open socket.
-`NNG_EINVAL`:: The value being passed is invalid.
-`NNG_ENOTSUP`:: The option _opt_ is not supported.
-`NNG_EREADONLY`:: The option _opt_ is read-only.
-`NNG_ESTATE`:: The socket is in an inappropriate state for setting this option.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_ctx_getopt.3.adoc[nng_ctx_getopt(3)],
-xref:nng_setopt.3.adoc[nng_setopt(3)],
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_ctx.5.adoc[nng_ctx(5)],
-xref:nng_options.5.adoc[nng_options(5)],
-xref:nng_socket.5.adoc[nng_socket(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/ref/ctx/nng_ctx_close.adoc b/docs/ref/ctx/nng_ctx_close.adoc
new file mode 100644
index 00000000..9e93db31
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_close.adoc
@@ -0,0 +1,35 @@
+## nng_ctx_close
+
+Close context.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_close(nng_ctx ctx);
+```
+
+### Description
+
+The `nng_ctx_close` function closes the context _ctx_.
+Messages that have been submitted for sending may be flushed or delivered, depending upon the transport.
+
+Further attempts to use the context after this call returns will result in `NNG_ECLOSED`.
+Threads waiting for operations on the context when this call is executed may also return with an `NNG_ECLOSED` result.
+
+TIP: Closing the socket associated with _ctx_ also closes this context.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ECLOSED`:: The context _ctx_ is already closed or was never opened.
+
+### See Also
+
+xref:../sock/nng_close.adoc[nng_close],
+xref:nng_ctx_open.adoc[nng_ctx_open]
diff --git a/docs/ref/ctx/nng_ctx_get.adoc b/docs/ref/ctx/nng_ctx_get.adoc
new file mode 100644
index 00000000..4df686bb
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_get.adoc
@@ -0,0 +1,102 @@
+## nng_ctx_get
+
+Get context option.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_get(nng_ctx ctx, const char *opt, void *val, size_t *valszp);
+
+int nng_ctx_get_bool(nng_ctx ctx, const char *opt, bool *bvalp);
+
+int nng_ctx_get_int(nng_ctx ctx, const char *opt, int *ivalp);
+
+int nng_ctx_get_ms(nng_ctx ctx, const char *opt, nng_duration *durp);
+
+int nng_ctx_get_size(nng_ctx ctx, const char *opt, size_t *zp);
+
+int nng_ctx_get_string(nng_ctx ctx, const char *opt, char **strp);
+
+int nng_ctx_get_uint64(nng_ctx ctx, const char *opt, uint64_t *u64p);
+
+```
+
+### Description
+
+(((options, context)))
+The `nng_ctx_get` functions are used to retrieve option values for the xref:nng_ctx.adoc[context] _ctx_.
+The actual options that may be retrieved in this way vary.
+A number of them are documented in xref:nng_options.adoc[nng_options].
+
+NOTE: Context options are protocol specific.
+The details will be documented with the protocol.
+
+#### Forms
+
+In all of these forms, the option _opt_ is retrieved from the context _ctx_.
+The forms vary based on the type of the option they take.
+
+The details of the type, size, and semantics of the option will depend on the actual option.
+See the documentation for the option itself for more information.
+
+`nng_ctx_get`::
+This function is untyped and can be used to retrieve the value of any option.
+The caller supplies a buffer to receive the value in _val_, and the size of that buffer in _valszp_. +
+ +
+When the function returns, the actual size of the data copied (or that would have been copied if sufficient space were present) is return in the location referenced by _valszp_.
+If the caller's buffer is not large enough to hold the entire object, then the copy is truncated.
+Therefore the caller should check for truncation by verifying that the returned size in _valszp_ does not exceed the original buffer size. +
+ +
+It is acceptable to pass `NULL` for _val_ if the value in _valszp_ is zero.
+This can be used to determine the size of the buffer needed to receive the object.
+
+TIP: It may be easier to use one of the typed forms of this function.
+
+`nng_ctx_get_bool`::
+This retrieves a Boolean (`bool`) into _bvalp_.
+
+`nng_ctx_get_int`::
+This function retrieves an integer (`int`) into _ivalp_.
+
+`nng_ctx_get_ms`::
+This function retrieves a time xref:nng_duration.adoc[duration] (in milliseconds) into _durp_.
+(The special value ((`NNG_DURATION_INFINITE`)) means an infinite amount of time, and
+the special value ((`NNG_DURATION_DEFAULT`)) means a context-specific default.)
+
+`nng_ctx_get_size`::
+This function retrieves a size into _zp_.
+This is typically used for buffer sizes, maximum sizes, and similar options.
+
+`nng_ctx_get_string`::
+This retrieves a string into _strp_.
+This string is created from the source using xref:nng_strdup.adoc[`nng_strdup`]
+and consequently must be freed by the caller using
+xref:nng_strfree.adoc[`nng_strfree`] when it is no longer needed.
+
+`nng_ctx_get_uint64`::
+This function is used to retrieve a 64-bit unsigned value into the value
+referenced by _u64p_.
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_EBADTYPE`:: Incorrect type for option.
+`NNG_ECLOSED`:: Parameter _s_ does not refer to an open socket.
+`NNG_EINVAL`:: Size of destination _val_ too small for object.
+`NNG_ENOMEM`:: Insufficient memory exists.
+`NNG_ENOTSUP`:: The option _opt_ is not supported.
+`NNG_EWRITEONLY`:: The option _opt_ is write-only.
+
+### See Also
+
+xref:../opts/index.adoc[Options],
+xref:nng_ctx_set.adoc[nng_ctx_set],
+xref:../util/nng_strdup.adoc[nng_strdup],
+xref:../util/nng_strfree.adoc[nng_strfree],
+xref:nng_options.adoc[nng_options]
diff --git a/docs/ref/ctx/nng_ctx_getopt.adoc b/docs/ref/ctx/nng_ctx_getopt.adoc
new file mode 100644
index 00000000..cd9dfd53
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_getopt.adoc
@@ -0,0 +1,43 @@
+## nng_ctx_getopt
+
+Get context option (deprecated).
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_getopt(nng_ctx ctx, const char *opt, void *val, size_t *valszp);
+int nng_ctx_getopt_bool(nng_ctx ctx, const char *opt, bool *bvalp);
+int nng_ctx_getopt_int(nng_ctx ctx, const char *opt, int *ivalp);
+int nng_ctx_getopt_ms(nng_ctx ctx, const char *opt, nng_duration *durp);
+int nng_ctx_getopt_size(nng_ctx ctx, const char *opt, size_t *zp);
+int nng_ctx_getopt_string(nng_ctx ctx, const char *opt, char **strp);
+int nng_ctx_getopt_uint64(nng_ctx ctx, const char *opt, uint64_t *u64p);
+```
+
+### Description
+
+NOTE: These functions are deprecated.
+They may not be present if the library was built with ((`NNG_ELIDE_DEPRECATED`)).
+
+These deprecated functions have one-to-one modern equivalents with the same arguments and semantics, as follows:
+
+[width=50%,]
+|===
+| Legacy Function | Modern Equivalent
+
+| `nng_ctx_getopt` | `nng_ctx_set`
+| `nng_ctx_getopt_bool`| `nng_ctx_get_bool`
+| `nng_ctx_getopt_int`| `nng_ctx_get_int`
+| `nng_ctx_getopt_ms`| `nng_ctx_get_ms`
+| `nng_ctx_getopt_size`| `nng_ctx_get_size`
+| `nng_ctx_getopt_string`| `nng_ctx_get_string`
+| `nng_ctx_getopt_uint64`| `nng_ctx_get_uint64`
+|===
+
+Please see the documentation for the modern equivalents for more detail.
+
+### See Also
+
+xref:../ctx/nng_ctx_get.adoc[nng_ctx_get]
diff --git a/docs/ref/ctx/nng_ctx_id.adoc b/docs/ref/ctx/nng_ctx_id.adoc
new file mode 100644
index 00000000..ebd05213
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_id.adoc
@@ -0,0 +1,29 @@
+## nng_ctx_id
+
+Return numeric context identifier.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_id(nng_ctx c);
+```
+
+### Description
+
+The `nng_ctx_id` function returns a positive identifier for the context _c_, if it is valid.
+Otherwise it returns `-1`.
+
+A context is considered valid if it was ever opened with xref:nng_ctx_open.adoc[`nng_ctx_open`].
+
+Contexts that are allocated on the stack or statically should be initialized with the macro ((`NNG_CTX_INITIALIZER`)) to ensure that they cannot be confused with another valid context.
+
+### Return Values
+
+This function returns the positive value for the context identifier, or `-1` if the context is invalid.
+
+
+### See Also
+
+xref:nng_ctx_open.adoc[nng_ctx_open]
diff --git a/docs/ref/ctx/nng_ctx_open.adoc b/docs/ref/ctx/nng_ctx_open.adoc
new file mode 100644
index 00000000..d3604e4a
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_open.adoc
@@ -0,0 +1,39 @@
+## nng_ctx_open
+
+Create context.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_open(nng_ctx *ctxp, nng_socket s);
+```
+
+### Description
+
+The `nng_ctx_open` function creates a separate ((context)) to be used with the socket _s_, and returns it at the location pointed by _ctxp_.
+Only stateful protocols support creation of separate contexts.footnote:[Stateless protocols by their very nature have no need for contexts.]
+
+Contexts allow the independent and concurrent use of stateful operations using the same socket.footnote:[For example, two different contexts created on a xref:../proto/rep.adoc[_rep_] socket can each receive requests, and send replies to them, without any regard to or interference with each other.]
+
+TIP: Using contexts is an excellent way to write simpler concurrent applications, while retaining the benefits of the protocol-specific
+advanced processing, avoiding the need to bypass that with xref:nng.adoc#raw_mode[raw mode](((raw mode))) sockets.footnote:[Use of contexts with xref:nng.adoc#raw_mode[raw mode] sockets is nonsensical, and not supported.]
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient memory is available.
+`NNG_ENOTSUP`:: The protocol does not support separate contexts, or the socket was opened in raw mode.
+
+### See Also
+
+xref:nng_ctx_close.adoc[nng_ctx_close],
+xref:nng_ctx_get.adoc[nng_ctx_get],
+xref:nng_ctx_recv.adoc[nng_ctx_recv],
+xref:nng_ctx_send.adoc[nng_ctx_send],
+xref:nng_ctx_set.adoc[nng_ctx_set]
diff --git a/docs/ref/ctx/nng_ctx_recv.adoc b/docs/ref/ctx/nng_ctx_recv.adoc
new file mode 100644
index 00000000..dc50f8bc
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_recv.adoc
@@ -0,0 +1,45 @@
+## nng_ctx_recv
+
+Receive message using context asynchronously.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void nng_ctx_recv(nng_ctx ctx, nng_aio *aio);
+```
+
+### Description
+
+The `nng_ctx_recv` function receives a xref:../msg/index.adoc[message] using the context _s_ asynchronously.
+
+When a message is successfully received by the context, it is stored in the _aio_ and the completion callback on the _aio_ is executed.
+In this case, xref:nng_aio_result.adoc[`nng_aio_result`] will return zero.
+The received message will be available via xref:nng_aio_get_msg.adoc[`nng_aio_get_msg`].
+The callback function is responsible for retrieving the message and disposing of it appropriately.
+
+IMPORTANT: Failing to accept and dispose of the message in this case will leak the message.
+
+If for some reason the asynchronous receive does not complete successfully, then the callback will be executed and xref:nng_aio_result.adoc[`nng_aio_result`] will return a non-zero error.
+In this case there will be no message in the _aio_.
+
+TIP: The semantics of what receiving a message means varies from protocol to protocol, so examination of the protocol documentation is encouraged.
+
+### Errors
+
+[horizontal]
+`NNG_ECANCELED`:: The operation was aborted.
+`NNG_ECLOSED`:: The context _ctx_ is not open.
+`NNG_ENOMEM`:: Insufficient memory is available.
+`NNG_ENOTSUP`:: The protocol for context _ctx_ does not support receiving.
+`NNG_ESTATE`:: The context _ctx_ cannot receive data in this state.
+`NNG_ETIMEDOUT`:: The receive timeout expired.
+
+### See Also
+
+xref:../aio/index.adoc[Asynchronous I/O],
+xref:../msg/index.adoc[Messages],
+xref:../aio/nng_aio_get_msg.adoc[nng_aio_get_msg],
+xref:../aio/nng_aio_result.adoc[nng_aio_result],
+xref:../aio/nng_ctx_recvmsg[nng_ctx_recvmsg]
diff --git a/docs/ref/ctx/nng_ctx_recvmsg.adoc b/docs/ref/ctx/nng_ctx_recvmsg.adoc
new file mode 100644
index 00000000..f5c8db03
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_recvmsg.adoc
@@ -0,0 +1,43 @@
+## nng_ctx_recvmsg
+
+Receive message using context.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_recvmsg(nng_ctx ctx, nng_msg **msgp, int flags);
+```
+
+### Description
+
+The `nng_ctx_recvmsg` receives a message on context _ctx_, storing the received xref:../msg/index.adoc[message] at the location pointed to by _msgp_.
+
+The _flags_ may contain the following value:
+
+`NNG_FLAG_NONBLOCK`::
+ The function returns immediately, even if no message is available.
+ Without this flag, the function will wait until a message is receivable on the context _ctx_, or any configured timer expires.
+
+TIP: The semantics of what receiving a message means vary from protocol to protocol, so examination of the protocol documentation is encouraged.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_EAGAIN`:: The operation would block, but `NNG_FLAG_NONBLOCK` was specified.
+`NNG_ECLOSED`:: The context or socket is not open.
+`NNG_EINVAL`:: An invalid set of _flags_ was specified.
+`NNG_ENOMEM`:: Insufficient memory is available.
+`NNG_ENOTSUP`:: The protocol does not support receiving.
+`NNG_ESTATE`:: The context cannot receive data in this state.
+`NNG_ETIMEDOUT`:: The operation timed out.
+
+### See Also
+
+xref:../msg/index.adoc[Messages],
+xref:nng_ctx_recv.adoc[nng_ctx_recv]
diff --git a/docs/ref/ctx/nng_ctx_send.adoc b/docs/ref/ctx/nng_ctx_send.adoc
new file mode 100644
index 00000000..2490010a
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_send.adoc
@@ -0,0 +1,46 @@
+## nng_ctx_send
+
+Send message using context asynchronously.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void nng_ctx_send(nng_ctx ctx, nng_aio *aio);
+```
+
+### Description
+
+The `nng_ctx_send` sends a xref:../msg/index.adoc[message] using the context _ctx_ asynchronously.
+
+The message to send must have previously been set on the _aio_ using the xref:../aio/nng_aio_set_msg.adoc[`nng_aio_set_msg`] function.
+
+If the message was successfully queued for delivery to the socket, then the _aio_ will be completed, and xref:../aio/nng_aio_result.adoc[`nng_aio_result`] will return zero.
+In this case the context will dispose of the message when it is finished with it.
+
+NOTE: The operation will complete, and the callback associated with the _aio_ will execute, as soon as the socket accepts the message for delivery.
+This does _not_ indicate that the message was actually delivered, as it may still be buffered in the sending or receiving sockets, or in flight over the physical medium.
+
+If the operation fails for any reason, then the _aio_ callback will be executed and `nng_aio_result` will return a non-zero error status.
+In this case, the callback has a responsibility to retrieve the message from the _aio_ with xref:nng_aio_get_msg.adoc[`nng_aio_get_msg`] and dispose of it appropriately.footnote:[This may include re-sending on the same or a different socket, or deallocating the message with xref:../msg/nng_msg_free.adoc[`nng_msg_free`].]
+
+TIP: The semantics of what sending a message means varies from protocol to protocol, so examination of the protocol documentation is encouraged.
+
+### Errors
+
+[horizontal]
+`NNG_ECANCELED`:: The operation was aborted.
+`NNG_ECLOSED`:: The context _ctx_ is not open.
+`NNG_EMSGSIZE`:: The message is too large.
+`NNG_ENOMEM`:: Insufficient memory is available.
+`NNG_ENOTSUP`:: The protocol for context _ctx_ does not support sending.
+`NNG_ESTATE`:: The context _ctx_ cannot send data in this state.
+`NNG_ETIMEDOUT`:: The send timeout expired.
+
+### See Also
+
+xref:../aio/index.adoc[Asynchronous I/O],
+xref:../msg/index.adoc[Messages],
+xref:../aio/nng_aio_get_msg.adoc[nng_aio_get_msg],
+xref:../aio/nng_aio_set_msg.adoc[nng_aio_set_msg]
diff --git a/docs/ref/ctx/nng_ctx_sendmsg.adoc b/docs/ref/ctx/nng_ctx_sendmsg.adoc
new file mode 100644
index 00000000..2eda9e7b
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_sendmsg.adoc
@@ -0,0 +1,63 @@
+## nng_ctx_sendmsg
+
+Send message using context.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_sendmsg(nng_ctx c, nng_msg *msg, int flags);
+```
+
+### Description
+
+The `nng_ctx_sendmsg` sends message _msg_ using the context _ctx_.
+
+If the function returns zero, indicating it has accepted the message for delivery, then the _msg_ is owned by the context, and the caller must not make any further use of it.
+The context will free the message when it is finished.
+
+If the function returns non-zero, then it is the caller's responsibility to dispose of the _msg_, which may include freeing it, sending it to another socket, or simply trying again later.
+
+TIP: The semantics of what sending a message means vary from protocol to protocol, so examination of the protocol documentation is encouraged.
+
+The _flags_ may contain the following value:
+
+`NNG_FLAG_NONBLOCK`::
+ The function returns immediately, regardless of whether the context is able to accept the data or not.
+ If the context is unable to accept the data{empty}footnote:[Such as if backpressure exists because the peers are consuming messages too slowly, or no peer is present.], then the function will return with `NNG_EAGAIN`.
+ If this flag is not specified, then the function will block if such a condition exists.
+
+
+NOTE: Regardless of the presence or absence of `NNG_FLAG_NONBLOCK`, there may
+be queues between the sender and the receiver.
+Furthermore, there is no guarantee that the message has actually been delivered.
+Finally, with some protocols, the semantic is implicitly `NNG_FLAG_NONBLOCK`.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_EAGAIN`:: The operation would block, but `NNG_FLAG_NONBLOCK` was specified.
+`NNG_ECLOSED`:: The context or socket is not open.
+`NNG_EINVAL`:: An invalid set of _flags_ was specified.
+`NNG_EMSGSIZE`:: The value of _size_ is too large.
+`NNG_ENOMEM`:: Insufficient memory is available.
+`NNG_ENOTSUP`:: The protocol does not support sending.
+`NNG_ESTATE`:: The context cannot send data in this state.
+`NNG_ETIMEDOUT`:: The operation timed out.
+
+### See Also
+
+xref:nng_msg_alloc.adoc[nng_msg_alloc],
+xref:nng_ctx_open.adoc[nng_ctx_open],
+xref:nng_ctx_recvmsg.adoc[nng_ctx_recvmsg],
+xref:nng_ctx_send.adoc[nng_ctx_send],
+xref:nng_sendmsg.adoc[nng_sendmsg],
+xref:nng_strerror.adoc[nng_strerror],
+xref:nng_msg.adoc[nng_msg],
+xref:nng_ctx.adoc[nng_ctx],
+xref:nng.adoc[nng]
diff --git a/docs/ref/ctx/nng_ctx_set.adoc b/docs/ref/ctx/nng_ctx_set.adoc
new file mode 100644
index 00000000..a6b6eef4
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_set.adoc
@@ -0,0 +1,81 @@
+## nng_ctx_set
+
+Set context option.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_set(nng_ctx ctx, const char *opt, const void *val, size_t valsz);
+
+int nng_ctx_set_bool(nng_ctx ctx, const char *opt, int bval);
+
+int nng_ctx_set_int(nng_ctx ctx, const char *opt, int ival);
+
+int nng_ctx_set_ms(nng_ctx ctx, const char *opt, nng_duration dur);
+
+int nng_ctx_set_size(nng_ctx ctx, const char *opt, size_t z);
+
+int nng_ctx_set_string(nng_ctx ctx, const char *opt, const char *str);
+
+int nng_ctx_set_uint64(nng_ctx ctx, const char *opt, uint64_t u64);
+```
+
+### Description
+
+(((options, context)))
+The `nng_ctx_set` functions are used to configure options for the context _ctx_.
+The actual options that may be configured in this way vary, and are specified by _opt_.
+
+TIP: Context options are protocol specific.
+See the option documentation for more information.
+
+#### Forms
+
+The details of the type, size, and semantics of the option will depend on the actual option, and will be documented with the option itself.
+
+`nng_ctx_set`::
+This function is untyped, and can be used to configure any arbitrary data.
+The _val_ pointer addresses the data to copy, and _valsz_ is the size of the objected located at _val_.
+
+TIP: It may be easier to use one of the typed forms of this function.
+
+`nng_ctx_set_bool`::
+This function sets a Boolean (`bool`) option to _bval_.
+
+`nng_ctx_set_int`::
+This function sets an integer (`int`) option to _ival_.
+
+`nng_ctx_set_ms`::
+This function sets a duration (xref:nng_duration.adoc[`nng_duration`]) option to _dur_, which is an integer number of milliseconds.
+
+`nng_ctx_set_size`::
+This function sets a size (`size_t`) option to _z_.
+
+`nng_ctx_set_string`::
+This function sets a string (`const char *`) option to _str_.
+Strings passed this way must be legal UTF-8 or ASCII strings, terminated with a `NUL` (`\0`) byte.
+(Other constraints may apply as well, see the documentation for each option for details.)
+
+`nng_ctx_set_uint64`::
+This function sets a 64-bit unsigned integer (`uint64_t`) option to _u64_.
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ECLOSED`:: Parameter _s_ does not refer to an open socket.
+`NNG_EINVAL`:: The value being passed is invalid.
+`NNG_ENOTSUP`:: The option _opt_ is not supported.
+`NNG_EREADONLY`:: The option _opt_ is read-only.
+`NNG_ESTATE`:: The socket is in an inappropriate state for setting this option.
+
+### See Also
+
+xref:../opts/index.adoc[Options],
+xref:nng_ctx_get.adoc[nng_ctx_get],
+xref:nng_socket_set.adoc[nng_socket_set]
diff --git a/docs/ref/ctx/nng_ctx_setopt.adoc b/docs/ref/ctx/nng_ctx_setopt.adoc
new file mode 100644
index 00000000..df6eda4d
--- /dev/null
+++ b/docs/ref/ctx/nng_ctx_setopt.adoc
@@ -0,0 +1,43 @@
+## nng_ctx_setopt
+
+Set context option (deprecated).
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_ctx_setopt(nng_ctx ctx, const char *opt, const void *val, size_t valsz);
+int nng_ctx_setopt_bool(nng_ctx ctx, const char *opt, int bval);
+int nng_ctx_setopt_int(nng_ctx ctx, const char *opt, int ival);
+int nng_ctx_setopt_ms(nng_ctx ctx, const char *opt, nng_duration dur);
+int nng_ctx_setopt_size(nng_ctx ctx, const char *opt, size_t z);
+int nng_ctx_setopt_string(nng_ctx ctx, const char *opt, const char *str);
+int nng_ctx_setopt_uint64(nng_ctx ctx, const char *opt, uint64_t u64);
+```
+
+### Description
+
+NOTE: These functions are deprecated.
+They may not be present if the library was built with ((`NNG_ELIDE_DEPRECATED`)).
+
+These deprecated functions have one-to-one modern equivalents with the same arguments and semantics, as follows:
+
+[width=50%,]
+|===
+| Legacy Function | Modern Equivalent
+
+| `nng_ctx_setopt` | `nng_ctx_set`
+| `nng_ctx_setopt_bool`| `nng_ctx_set_bool`
+| `nng_ctx_setopt_int`| `nng_ctx_set_int`
+| `nng_ctx_setopt_ms`| `nng_ctx_set_ms`
+| `nng_ctx_setopt_size`| `nng_ctx_set_size`
+| `nng_ctx_setopt_string`| `nng_ctx_set_string`
+| `nng_ctx_setopt_uint64`| `nng_ctx_set_uint64`
+|===
+
+Please see the documentation for the modern equivalents for more detail.
+
+### See Also
+
+xref:../ctx/nng_ctx_set.adoc[nng_ctx_set]