aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Woltersdorf <jake@playruyi.com>2019-03-04 12:35:19 +0800
committerGarrett D'Amore <garrett@damore.org>2019-04-07 19:13:44 -0700
commitc3e062661388f70386d6766e3ce648030af340ee (patch)
treea6d247bd24a17e3201a75b1a164e75d16e37196c
parent989c5e90d48066b12ad44ed903cfc163d8e89b29 (diff)
downloadnng-c3e062661388f70386d6766e3ce648030af340ee.tar.gz
nng-c3e062661388f70386d6766e3ce648030af340ee.tar.bz2
nng-c3e062661388f70386d6766e3ce648030af340ee.zip
fixes #901 shorter option get/set functions for all types
- Renamed internal nng_*_getx/setx methods with "nni" prefix - Moved stream get/set option definition macros to options.h and added "NNI_" prefix - "_PTR" variant of get/set option definition macros is for when first arg is passed as pointer (`nng_stream *s` vs `nng_pipe s`) - New get/set option functions for `nng_socket` are `nng_socket_get_X` eschewing the previous `nng_getopt` pattern - Macro-fy legacy getopt/setopt and implement in terms of "new" API - nng_setopt* use "new" shorter API. Add missing uint64 set functions. - Shorter get/set option functions get own man page and old getopt/setopt link to them - Built with -DNNG_ENABLE_DOC=ON and part of central libnng index - Update copyright
-rw-r--r--docs/man/CMakeLists.txt9
-rw-r--r--docs/man/libnng.3.adoc9
-rw-r--r--docs/man/nng_ctx_get.3.adoc131
-rw-r--r--docs/man/nng_ctx_getopt.3.adoc5
-rw-r--r--docs/man/nng_ctx_set.3.adoc113
-rw-r--r--docs/man/nng_ctx_setopt.3.adoc5
-rw-r--r--docs/man/nng_dialer_get.3.adoc147
-rw-r--r--docs/man/nng_dialer_getopt.3.adoc5
-rw-r--r--docs/man/nng_dialer_set.3.adoc131
-rw-r--r--docs/man/nng_dialer_setopt.3.adoc5
-rw-r--r--docs/man/nng_getopt.3.adoc5
-rw-r--r--docs/man/nng_listener_get.3.adoc147
-rw-r--r--docs/man/nng_listener_getopt.3.adoc5
-rw-r--r--docs/man/nng_listener_set.3.adoc133
-rw-r--r--docs/man/nng_listener_setopt.3.adoc7
-rw-r--r--docs/man/nng_pipe_get.3.adoc153
-rw-r--r--docs/man/nng_pipe_getopt.3.adoc5
-rw-r--r--docs/man/nng_setopt.3.adoc6
-rw-r--r--docs/man/nng_socket_get.3.adoc144
-rw-r--r--docs/man/nng_socket_set.3.adoc124
-rw-r--r--include/nng/nng.h103
-rw-r--r--src/core/options.h170
-rw-r--r--src/core/stream.c88
-rw-r--r--src/nng.c417
-rw-r--r--src/platform/windows/win_pipe.c2
25 files changed, 1596 insertions, 473 deletions
diff --git a/docs/man/CMakeLists.txt b/docs/man/CMakeLists.txt
index 747e1bad..061528b5 100644
--- a/docs/man/CMakeLists.txt
+++ b/docs/man/CMakeLists.txt
@@ -84,18 +84,22 @@ if (NNG_ENABLE_DOC)
nng_bus_open
nng_close
nng_ctx_close
+ nng_ctx_get
nng_ctx_getopt
nng_ctx_id
nng_ctx_open
nng_ctx_recv
nng_ctx_send
+ nng_ctx_set
nng_ctx_setopt
nng_device
nng_dial
nng_dialer_close
nng_dialer_create
+ nng_dialer_get
nng_dialer_getopt
nng_dialer_id
+ nng_dialer_set
nng_dialer_setopt
nng_dialer_start
nng_free
@@ -105,8 +109,10 @@ if (NNG_ENABLE_DOC)
nng_listen
nng_listener_close
nng_listener_create
+ nng_listener_get
nng_listener_getopt
nng_listener_id
+ nng_listener_set
nng_listener_setopt
nng_listener_start
nng_msg_alloc
@@ -132,6 +138,7 @@ if (NNG_ENABLE_DOC)
nng_pair_open
nng_pipe_close
nng_pipe_dialer
+ nng_pipe_get
nng_pipe_getopt
nng_pipe_id
nng_pipe_listener
@@ -152,6 +159,8 @@ if (NNG_ENABLE_DOC)
nng_setopt
nng_sleep_aio
nng_socket_id
+ nng_socket_get
+ nng_socket_set
nng_stats_free
nng_stats_get
nng_stat_child
diff --git a/docs/man/libnng.3.adoc b/docs/man/libnng.3.adoc
index 3aebcf76..bf2a602d 100644
--- a/docs/man/libnng.3.adoc
+++ b/docs/man/libnng.3.adoc
@@ -50,7 +50,9 @@ The following functions operate on sockets.
|xref:nng_recv.3.adoc[nng_recv()]|receive data
|xref:nng_send.3.adoc[nng_send()]|send data
|xref:nng_setopt.3.adoc[nng_setopt()]|set socket option
+|xref:nng_socket_get.3.adoc[nng_socket_get()]|get socket option
|xref:nng_socket_id.3.adoc[nng_socket_id()]|get numeric socket identifier
+|xref:nng_socket_set.3.adoc[nng_socket_set()]|set socket option
|===
=== Connection Management
@@ -62,19 +64,24 @@ Listeners accept incoming connection requests, and dialers make them.
|xref:nng_dial.3.adoc[nng_dial()]|create and start dialer
|xref:nng_dialer_close.3.adoc[nng_dialer_close()]|close dialer
|xref:nng_dialer_create.3.adoc[nng_dialer_create()]|create dialer
+|xref:nng_dialer_get.3.adoc[nng_dialer_get()]|get dialer option
|xref:nng_dialer_getopt.3.adoc[nng_dialer_getopt()]|get dialer option
|xref:nng_dialer_id.3.adoc[nng_dialer_id()]|get numeric dialer identifier
+|xref:nng_dialer_set.3.adoc[nng_dialer_set()]|set dialer option
|xref:nng_dialer_setopt.3.adoc[nng_dialer_setopt()]|set dialer option
|xref:nng_dialer_start.3.adoc[nng_dialer_start()]|start dialer
|xref:nng_listen.3.adoc[nng_listen()]|create and start listener
|xref:nng_listener_close.3.adoc[nng_listener_close()]|close listener
|xref:nng_listener_create.3.adoc[nng_listener_create()]|create listener
+|xref:nng_listener_get.3.adoc[nng_listener_get()]|get listener option
|xref:nng_listener_getopt.3.adoc[nng_listener_getopt()]|get listener option
|xref:nng_listener_id.3.adoc[nng_listener_id()]|get numeric listener identifier
+|xref:nng_listener_set.3.adoc[nng_listener_set()]|set listener option
|xref:nng_listener_setopt.3.adoc[nng_listener_setopt()]|set listener option
|xref:nng_listener_start.3.adoc[nng_listener_start()]|start listener
|xref:nng_pipe_close.3.adoc[nng_pipe_close()]|close pipe
|xref:nng_pipe_dialer.3.adoc[nng_pipe_dialer()]|return dialer that created pipe
+|xref:nng_pipe_get.3.adoc[nng_pipe_get()]|get pipe option
|xref:nng_pipe_getopt.3.adoc[nng_pipe_getopt()]|get pipe option
|xref:nng_pipe_id.3.adoc[nng_pipe_id()]|get numeric pipe identifier
|xref:nng_pipe_listener.3.adoc[nng_pipe_listener()]|return listener that created pipe
@@ -215,11 +222,13 @@ concurrent applications.
|===
|xref:nng_ctx_close.3.adoc[nng_ctx_close()]|close context
+|xref:nng_ctx_get.3.adoc[nng_ctx_get()]|get context option
|xref:nng_ctx_getopt.3.adoc[nng_ctx_getopt()]|get context option
|xref:nng_ctx_id.3.adoc[nng_ctx_id()]|get numeric context identifier
|xref:nng_ctx_open.3.adoc[nng_ctx_open()]|create context
|xref:nng_ctx_recv.3.adoc[nng_ctx_recv()]|receive message using context asynchronously
|xref:nng_ctx_send.3.adoc[nng_ctx_send()]|send message using context asynchronously
+|xref:nng_ctx_set.3.adoc[nng_ctx_set()]|set context option
|xref:nng_ctx_setopt.3.adoc[nng_ctx_setopt()]|set context option
|===
diff --git a/docs/man/nng_ctx_get.3.adoc b/docs/man/nng_ctx_get.3.adoc
new file mode 100644
index 00000000..e6e9cc1f
--- /dev/null
+++ b/docs/man/nng_ctx_get.3.adoc
@@ -0,0 +1,131 @@
+= 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 <<nng_ctx.5#,context>> _ctx_.
+The actual options that may be retrieved in this way vary.
+A number of them are documented in <<nng_options.5#,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 <<nng_duration.5#,durations>>
+(such as timeouts), stored in _durp_ as a number of milliseconds.
+(The special value ((`NNG_DUR_INFINITE`)) means an infinite amount of time, and
+the special value ((`NNG_DUR_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 `<<nng_strdup.3#,nng_strdup()>>`
+and consequently must be freed by the caller using
+`<<nng_strfree.3#,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]
+<<nng_ctx_set.3#,nng_ctx_set(3)>>,
+<<nng_strdup.3#,nng_strdup(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_strfree.3#,nng_strfree(3)>>,
+<<nng_duration.5#,nng_duration(5)>>,
+<<nng_ctx.5#,nng_ctx(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_ctx_getopt.3.adoc b/docs/man/nng_ctx_getopt.3.adoc
index 8c708dc6..2ae8b992 100644
--- a/docs/man/nng_ctx_getopt.3.adoc
+++ b/docs/man/nng_ctx_getopt.3.adoc
@@ -1,6 +1,6 @@
= nng_ctx_getopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -32,10 +32,13 @@ 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. Please see xref:nng_ctx_get.3.adoc[nng_ctx_get].
+
(((options, context)))
The `nng_ctx_getopt()` functions are used to retrieve option values for
the <<nng_ctx.5#,context>> _ctx_.
diff --git a/docs/man/nng_ctx_set.3.adoc b/docs/man/nng_ctx_set.3.adoc
new file mode 100644
index 00000000..8c9c5095
--- /dev/null
+++ b/docs/man/nng_ctx_set.3.adoc
@@ -0,0 +1,113 @@
+= 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 `<<nng_duration.5#,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]
+<<nng_ctx_get.3#,nng_ctx_get(3)>>,
+<<nng_socket_set.3#,nng_socket_set(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_ctx.5#,nng_ctx(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng_socket.5#,nng_socket(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_ctx_setopt.3.adoc b/docs/man/nng_ctx_setopt.3.adoc
index 45f178f8..478410b5 100644
--- a/docs/man/nng_ctx_setopt.3.adoc
+++ b/docs/man/nng_ctx_setopt.3.adoc
@@ -1,6 +1,6 @@
= nng_ctx_setopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -35,6 +35,9 @@ int nng_ctx_setopt_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_setopt()` functions are used to configure options for
the context _ctx_.
diff --git a/docs/man/nng_dialer_get.3.adoc b/docs/man/nng_dialer_get.3.adoc
new file mode 100644
index 00000000..86fec260
--- /dev/null
+++ b/docs/man/nng_dialer_get.3.adoc
@@ -0,0 +1,147 @@
+= nng_dialer_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_dialer_get - get dialer option
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+int nng_dialer_get(nng_dialer d, const char *opt, void *val, size_t *valszp);
+
+int nng_dialer_get_bool(nng_dialer d, const char *opt, bool *bvalp);
+
+int nng_dialer_get_int(nng_dialer d, const char *opt, int *ivalp);
+
+int nng_dialer_get_ms(nng_dialer d, const char *opt, nng_duration *durp);
+
+int nng_dialer_get_ptr(nng_dialer d, const char *opt, void **ptr);
+
+int nng_dialer_get_size(nng_dialer d, const char *opt, size_t *zp);
+
+int nng_dialer_get_addr(nng_dialer d, const char *opt, nng_sockaddr *sap);
+
+int nng_dialer_get_string(nng_dialer d, const char *opt, char **strp);
+
+int nng_dialer_get_uint64(nng_dialer d, const char *opt, uint64_t *u64p);
+
+----
+
+== DESCRIPTION
+
+(((options, dialer)))
+The `nng_dialer_get()` functions are used to retrieve option values for
+the <<nng_dialer.5#,dialer>> _d_.
+The actual options that may be retrieved in this way
+vary, and many are documented in <<nng_options.5#,nng_options(5)>>.
+
+Additionally some transport-specific options and protocol-specific options
+are documented with the transports and protocols themselves.
+
+=== Forms
+
+In all of these forms, the option _opt_ is retrieved from the dialer _d_.
+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_dialer_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 validate that the returned size in _valszp_ does not
+exceed the original buffer size to check for truncation. +
+ +
+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_dialer_get_bool()`::
+This function is for options which take a Boolean (`bool`).
+The value will be stored at _bvalp_.
+
+`nng_dialer_get_int()`::
+This function is for options which take an integer (`int`).
+The value will be stored at _ivalp_.
+
+`nng_dialer_get_ms()`::
+This function is used to retrieve time <<nng_duration.5#,durations>>
+(such as timeouts), stored in _durp_ as a number of milliseconds.
+(The special value ((`NNG_DUR_INFINITE`)) means an infinite amount of time, and
+the special value ((`NNG_DUR_DEFAULT`)) means a context-specific default.)
+
+`nng_dialer_get_ptr()`::
+This function is used to retrieve a pointer, _ptr_, to structured data.
+The data referenced by _ptr_ is generally managed using other functions.
+Note that this form is somewhat special in that the object is generally
+not copied, but instead the *pointer* to the object is copied.
+
+`nng_dialer_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_dialer_get_addr()`::
+This function is used to retrieve an `<<nng_sockaddr.5#,nng_sockaddr>>`
+into the value referenced by _sap_.
+
+`nng_dialer_get_string()`::
+This function is used to retrieve a string into _strp_.
+This string is created from the source using `<<nng_strdup.3#,nng_strdup()>>`
+and consequently must be freed by the caller using
+`<<nng_strfree.3#,nng_strfree()>>` when it is no longer needed.
+
+`nng_dialer_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 returns 0 on success, and non-zero otherwise.
+
+== ERRORS
+
+[horizontal]
+`NNG_EBADTYPE`:: Incorrect type for option.
+`NNG_ECLOSED`:: Parameter _d_ does not refer to an open dialer.
+`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]
+<<nng_dialer_create.3#,nng_dialer_create(3)>>
+<<nng_dialer_set.3#,nng_dialer_set(3)>>
+<<nng_strdup.3#,nng_strdup(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_strfree.3#,nng_strfree(3)>>,
+<<nng_dialer.5#,nng_dialer(5)>>,
+<<nng_duration.5#,nng_duration(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng_sockaddr.5#,nng_sockaddr(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_dialer_getopt.3.adoc b/docs/man/nng_dialer_getopt.3.adoc
index 6b2f3c1e..ea7529dc 100644
--- a/docs/man/nng_dialer_getopt.3.adoc
+++ b/docs/man/nng_dialer_getopt.3.adoc
@@ -1,6 +1,6 @@
= nng_dialer_getopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -36,10 +36,13 @@ int nng_dialer_getopt_sockaddr(nng_dialer d, const char *opt, nng_sockaddr *sap)
int nng_dialer_getopt_string(nng_dialer d, const char *opt, char **strp);
int nng_dialer_getopt_uint64(nng_dialer d, const char *opt, uint64_t *u64p);
+
----
== DESCRIPTION
+NOTE: These functions are deprecated. Please see xref:nng_dialer_get.3.adoc[nng_dialer_get].
+
(((options, dialer)))
The `nng_dialer_getopt()` functions are used to retrieve option values for
the <<nng_dialer.5#,dialer>> _d_.
diff --git a/docs/man/nng_dialer_set.3.adoc b/docs/man/nng_dialer_set.3.adoc
new file mode 100644
index 00000000..5f81e9a0
--- /dev/null
+++ b/docs/man/nng_dialer_set.3.adoc
@@ -0,0 +1,131 @@
+= nng_dialer_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_dialer_set - set dialer option
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+int nng_dialer_set(nng_dialer d, const char *opt, const void *val,
+ size_t valsz);
+
+int nng_dialer_set_bool(nng_dialer d, const char *opt, bool bval);
+
+int nng_dialer_set_int(nng_dialer d, const char *opt, int ival);
+
+int nng_dialer_set_ms(nng_dialer d, const char *opt, nng_duration dur);
+
+int nng_dialer_set_ptr(nng_dialer d, const char *opt, void *ptr);
+
+int nng_dialer_set_size(nng_dialer d, const char *opt, size_t z);
+
+int nng_dialer_set_string(nng_dialer d, const char *opt, const char *str);
+
+int nng_dialer_set_uint64(nng_dialer d, const char *opt, uint64_t u64);
+
+----
+
+== DESCRIPTION
+
+(((options, dialer)))
+The `nng_dialer_set()` functions are used to configure options for
+the <<nng_dialer.5#,dialer>> _d_.
+The actual options that may be configured in this way
+vary, and many are documented in <<nng_options.5#,nng_options(5)>>.
+
+Additionally some transport-specific options are documented with the
+transports themselves.
+
+NOTE: Once a dialer has started, it is generally not possible to change
+its configuration.
+
+=== Forms
+
+In all of these forms, the option _opt_ is configured on the dialer _d_.
+
+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_dialer_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_dialer_set_bool()`::
+This function is for options which take a Boolean (`bool`).
+The _bval_ is passed to the option.
+
+`nng_dialer_set_int()`::
+This function is for options which take an integer (`int`).
+The _ival_ is passed to the option.
+
+`nng_dialer_set_ms()`::
+This function is used to configure time durations (such as timeouts) using
+type `<<nng_duration.5#,nng_duration>>`.
+The duration _dur_ is an integer number of milliseconds.
+
+`nng_dialer_set_ptr()`::
+This function is used to pass a pointer, _ptr_, to structured data.
+The data referenced by _ptr_ is generally managed by other functions.
+For example, TLS configuration objects created with
+(`<<nng_tls_config_alloc.3tls#,nng_tls_config_alloc()>>`)
+can be passed this way.
+
+NOTE: This form is somewhat special in that the object is generally
+not copied, but instead the *pointer* to the object is copied.
+
+`nng_dialer_set_size()`::
+This function is used to configure a size, _z_, typically for buffer sizes,
+message maximum sizes, and similar options.
+
+`nng_dialer_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_dialer_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 such.
+
+== RETURN VALUES
+
+These functions return 0 on success, and non-zero otherwise.
+
+== ERRORS
+
+[horizontal]
+`NNG_EBADTYPE`:: Incorrect type for option.
+`NNG_ECLOSED`:: Parameter _d_ does not refer to an open dialer.
+`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 dialer _d_ is already started.
+
+== SEE ALSO
+
+[.text-left]
+<<nng_dialer_create.3#,nng_dialer_create(3)>>
+<<nng_dialer_get.3#,nng_dialer_get(3)>>
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_dialer.5#,nng_dialer(5)>>,
+<<nng_duration.5#,nng_duration(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_dialer_setopt.3.adoc b/docs/man/nng_dialer_setopt.3.adoc
index 01fcb3d4..1e96d4de 100644
--- a/docs/man/nng_dialer_setopt.3.adoc
+++ b/docs/man/nng_dialer_setopt.3.adoc
@@ -1,6 +1,6 @@
= nng_dialer_setopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -35,10 +35,13 @@ int nng_dialer_setopt_size(nng_dialer d, const char *opt, size_t z);
int nng_dialer_setopt_string(nng_dialer d, const char *opt, const char *str);
int nng_dialer_setopt_uint64(nng_dialer d, const char *opt, uint64_t u64);
+
----
== DESCRIPTION
+NOTE: These functions are deprecated. Please see xref:nng_dialer_set.3.adoc[nng_dialer_set].
+
(((options, dialer)))
The `nng_dialer_setopt()` functions are used to configure options for
the <<nng_dialer.5#,dialer>> _d_.
diff --git a/docs/man/nng_getopt.3.adoc b/docs/man/nng_getopt.3.adoc
index 491d6038..3b52b348 100644
--- a/docs/man/nng_getopt.3.adoc
+++ b/docs/man/nng_getopt.3.adoc
@@ -1,6 +1,6 @@
= nng_getopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -34,10 +34,13 @@ int nng_getopt_size(nng_socket s, const char *opt, size_t *zp);
int nng_getopt_string(nng_socket s, const char *opt, char **strp);
int nng_getopt_uint64(nng_socket s, const char *opt, uint64_t *u64p);
+
----
== DESCRIPTION
+NOTE: These functions are deprecated. Please see xref:nng_socket_get.3.adoc[nng_socket_get].
+
(((options, socket)))
The `nng_getopt()` functions are used to retrieve option values for
the <<nng_socket.5#,socket>> _s_.
diff --git a/docs/man/nng_listener_get.3.adoc b/docs/man/nng_listener_get.3.adoc
new file mode 100644
index 00000000..4c74fa5d
--- /dev/null
+++ b/docs/man/nng_listener_get.3.adoc
@@ -0,0 +1,147 @@
+= nng_listener_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_listener_get - get listener option
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+int nng_listener_get(nng_listener l, const char *opt, void *val, size_t *valszp);
+
+int nng_listener_get_bool(nng_listener l, const char *opt, bool *bvalp);
+
+int nng_listener_get_int(nng_listener l, const char *opt, int *ivalp);
+
+int nng_listener_get_ms(nng_listener l, const char *opt, nng_duration *durp);
+
+int nng_listener_get_ptr(nng_listener l, const char *opt, void **ptr);
+
+int nng_listener_get_size(nng_listener l, const char *opt, size_t *zp);
+
+int nng_listener_get_addr(nng_listener l, const char *opt, nng_sockaddr *sap);
+
+int nng_listener_get_string(nng_listener l, const char *opt, char **strp);
+
+int nng_listener_get_uint64(nng_listener l, const char *opt, uint64_t *u64p);
+
+----
+
+== DESCRIPTION
+
+(((options, listener)))
+The `nng_listener_get()` functions are used to retrieve option values for
+the <<nng_listener.5#,listener>> _l_.
+The actual options that may be retrieved in this way
+vary, and many are documented in <<nng_options.5#,nng_options(5)>>.
+
+Additionally some transport-specific options and protocol-specific options
+are documented with the transports and protocols themselves.
+
+=== Forms
+
+In all of these forms, the option _opt_ is retrieved from the listener _l_.
+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_listener_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 validate that the returned size in _valszp_ does not
+exceed the original buffer size to check for truncation. +
+ +
+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_listener_get_bool()`::
+This function is for options which take a Boolean (`bool`).
+The value will be stored at _bvalp_.
+
+`nng_listener_get_int()`::
+This function is for options which take an integer (`int`).
+The value will be stored at _ivalp_.
+
+`nng_listener_get_ms()`::
+This function is used to retrieve time <<nng_duration.5#,durations>>
+(such as timeouts), stored in _durp_ as a number of milliseconds.
+
+`nng_listener_get_ptr()`::
+This function is used to retrieve a pointer, _ptr_, to structured data.
+The data referenced by _ptr_ is generally managed using other functions.
+Note that this form is somewhat special in that the object is generally
+not copied, but instead the *pointer* to the object is copied.
+
+`nng_listener_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_listener_get_addr()`::
+This function is used to retrieve an `<<nng_sockaddr.5#,nng_sockaddr>>`
+into the value referenced by _sap_.
+
+`nng_listener_get_string()`::
+This function is used to retrieve a string into _strp_.
+This string is created from the source using `<<nng_strdup.3#,nng_strdup()>>`
+and consequently must be freed by the caller using
+`<<nng_strfree.3#,nng_strfree()>>` when it is no longer needed.
+
+`nng_listener_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 _l_ does not refer to an open listener.
+`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]
+<<nng_listen.3#,nng_listen(3)>>,
+<<nng_listener_create.3#,nng_listener_create(3)>>
+<<nng_listener_set.3#,nng_listener_set(3)>>
+<<nng_socket_get.3#,nng_socket_get(3)>>,
+<<nng_strdup.3#,nng_strdup(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_strfree.3#,nng_strfree(3)>>,
+<<nng_duration.5#,nng_duration(5)>>,
+<<nng_listener.5#,nng_listener(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng_sockaddr.5#,nng_sockaddr(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_listener_getopt.3.adoc b/docs/man/nng_listener_getopt.3.adoc
index ef5129ca..17ef0e71 100644
--- a/docs/man/nng_listener_getopt.3.adoc
+++ b/docs/man/nng_listener_getopt.3.adoc
@@ -1,6 +1,6 @@
= nng_listener_getopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -36,10 +36,13 @@ int nng_listener_getopt_sockaddr(nng_listener l, const char *opt, nng_sockaddr *
int nng_listener_getopt_string(nng_listener l, const char *opt, char **strp);
int nng_listener_getopt_uint64(nng_listener l, const char *opt, uint64_t *u64p);
+
----
== DESCRIPTION
+NOTE: These functions are deprecated. Please see xref:nng_listener_get.3.adoc[nng_listener_get].
+
(((options, listener)))
The `nng_listener_getopt()` functions are used to retrieve option values for
the <<nng_listener.5#,listener>> _l_.
diff --git a/docs/man/nng_listener_set.3.adoc b/docs/man/nng_listener_set.3.adoc
new file mode 100644
index 00000000..e8caf56b
--- /dev/null
+++ b/docs/man/nng_listener_set.3.adoc
@@ -0,0 +1,133 @@
+= nng_listener_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_listener_set - set listener option
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+int nng_listener_set(nng_listener l, const char *opt, const void *val,
+ size_t valsz);
+
+int nng_listener_set_bool(nng_listener l, const char *opt, bool bval);
+
+int nng_listener_set_int(nng_listener l, const char *opt, int ival);
+
+int nng_listener_set_ms(nng_listener l, const char *opt, nng_duration dur);
+
+int nng_listener_set_ptr(nng_listener l, const char *opt, void *ptr);
+
+int nng_listener_set_size(nng_listener l, const char *opt, size_t z);
+
+int nng_listener_set_string(nng_listener l, const char *opt, const char *str);
+
+int nng_listener_set_uint64(nng_listener l, const char *opt, uint64_t u64);
+
+----
+
+== DESCRIPTION
+
+(((options, listener)))
+The `nng_listener_set()` functions are used to configure options for
+the <<nng_listener.5#,listener>> _l_.
+The actual options that may be configured in this way
+vary, and many are documented in <<nng_options.5#,nng_options(5)>>.
+
+Additionally some transport-specific options and protocol-specific options
+are documented with the transports and protocols themselves.
+
+NOTE: Once a listener has started, it is generally not possible to change
+its configuration.
+
+=== Forms
+
+In all of these forms, the option _opt_ is configured on the listener _l_.
+
+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.
+
+TIP: It may be easier to use one of the typed forms of this function.
+
+`nng_listener_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_.
+
+`nng_listener_set_bool()`::
+This function is for options which take a Boolean (`bool`).
+The _bval_ is passed to the option.
+
+`nng_listener_set_int()`::
+This function is for options which take an integer (`int`).
+The _ival_ is passed to the option.
+
+`nng_listener_set_ms()`::
+This function is used to configure time durations (such as timeouts) using
+type `<<nng_duration.5#,nng_duration>>`.
+The duration _dur_ is an integer number of milliseconds.
+
+`nng_listener_set_ptr()`::
+This function is used to pass a pointer, _ptr_, to structured data.
+The data referenced by _ptr_ is generally managed by other functions.
+For example, TLS configuration objects created with
+(`<<nng_tls_config_alloc.3tls#,nng_tls_config_alloc()>>`)
+can be passed this way.
+
+NOTE: This form is somewhat special in that the object is generally
+not copied, but instead the *pointer* to the object is copied.
+
+`nng_listener_set_size()`::
+This function is used to configure a size, _z_, typically for buffer sizes,
+message maximum sizes, and similar options.
+
+`nng_listener_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_listener_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_EBADTYPE`:: Incorrect type for option.
+`NNG_ECLOSED`:: Parameter _l_ does not refer to an open listener.
+`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 listener _l_ is already started.
+
+== SEE ALSO
+
+[.text-left]
+<<nng_listen.3#,nng_listen(3)>>,
+<<nng_listener_create.3#,nng_listener_create(3)>>
+<<nng_listener_get.3#,nng_listener_get(3)>>
+<<nng_socket_set.3#,nng_socket_set(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_duration.5#,nng_duration(5)>>,
+<<nng_listener.5#,nng_listener(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_listener_setopt.3.adoc b/docs/man/nng_listener_setopt.3.adoc
index 35721bee..ad513921 100644
--- a/docs/man/nng_listener_setopt.3.adoc
+++ b/docs/man/nng_listener_setopt.3.adoc
@@ -1,6 +1,6 @@
= nng_listener_setopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -21,7 +21,7 @@ nng_listener_setopt - set listener option
int nng_listener_setopt(nng_listener l, const char *opt, const void *val,
size_t valsz);
-
+
int nng_listener_setopt_bool(nng_listener l, const char *opt, bool bval);
int nng_listener_setopt_int(nng_listener l, const char *opt, int ival);
@@ -35,10 +35,13 @@ int nng_listener_setopt_size(nng_listener l, const char *opt, size_t z);
int nng_listener_setopt_string(nng_listener l, const char *opt, const char *str);
int nng_listener_setopt_uint64(nng_listener l, const char *opt, uint64_t u64);
+
----
== DESCRIPTION
+NOTE: These functions are deprecated. Please see xref:nng_listener_set.3.adoc[nng_listener_set].
+
(((options, listener)))
The `nng_listener_setopt()` functions are used to configure options for
the <<nng_listener.5#,listener>> _l_.
diff --git a/docs/man/nng_pipe_get.3.adoc b/docs/man/nng_pipe_get.3.adoc
new file mode 100644
index 00000000..791827b9
--- /dev/null
+++ b/docs/man/nng_pipe_get.3.adoc
@@ -0,0 +1,153 @@
+= nng_pipe_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_pipe_get - get pipe option
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+int nng_pipe_get(nng_pipe p, const char *opt, void *val, size_t *valszp);
+
+int nng_pipe_get_bool(nng_pipe p, const char *opt, bool *bvalp);
+
+int nng_pipe_get_int(nng_pipe p, const char *opt, int *ivalp);
+
+int nng_pipe_get_ms(nng_pipe p, const char *opt, nng_duration *durp);
+
+int nng_pipe_get_ptr(nng_pipe p, const char *opt, void **ptr);
+
+int nng_pipe_get_addr(nng_pipe p, const char *opt, nng_sockaddr *sap);
+
+int nng_pipe_get_string(nng_pipe p, const char *opt, char **strp);
+
+int nng_pipe_get_size(nng_pipe p, const char *opt, size_t *zp);
+
+int nng_pipe_get_uint64(nng_pipe p, const char *opt, uint64_t *u64p);
+
+----
+
+== DESCRIPTION
+
+(((options, pipe)))
+The `nng_pipe_get()` functions are used to retrieve option values for
+the <<nng_pipe.5#,pipe>> _p_.
+The actual options that may be retrieved in this way
+vary, and many are documented in <<nng_options.5#,nng_options(5)>>.
+Additionally some transport-specific options and protocol-specific options are
+documented with the transports and protocols themselves.
+
+NOTE: All "`options`" on a pipe are read-only values.
+Modification of options may be done before the pipe is created using
+`<<nng_listener_set.3#,nng_listener_set()>>` or
+`<<nng_dialer_get.3#,nng_dialer_set()>>`.
+
+Any option that is set on a dialer or listener will normally be retrievable
+from pipes created by that dialer or listener.
+
+=== Forms
+
+In all of these forms, the option _opt_ is retrieved from the pipe _p_.
+
+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_pipe_get()`::
+This is untyped, and can be used to retrieve the value of any option.
+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
+size returned 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_pipe_get_bool()`::
+This function is for options which take a Boolean (`bool`).
+The value will be stored at _bvalp_.
+
+`nng_pipe_get_int()`::
+This function is for options which take an integer (`int`).
+The value will be stored at _ivalp_.
+
+`nng_pipe_get_ms()`::
+This function is used to retrieve time durations
+(`<<nng_duration.5#,nng_duration>>`) in milliseconds, which are stored in
+_durp_.
+
+`nng_pipe_get_ptr()`::
+This function is used to retrieve a pointer, _ptr_, to structured data.
+The data referenced by _ptr_ is generally managed using other functions.
+Note that this form is somewhat special in that the object is generally
+not copied, but instead the *pointer* to the object is copied.
+
+`nng_pipe_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_pipe_get_addr()`::
+This function is used to retrieve an `<<nng_sockaddr.5#,nng_sockaddr>>`
+into _sap_.
+
+`nng_pipe_get_string()`::
+This function is used to retrieve a string into _strp_.
+This string is created from the source using `<<nng_strdup.3#,nng_strdup()>>`
+and consequently must be freed by the caller using
+`<<nng_strfree.3#,nng_strfree()>>` when it is no longer needed.
+
+`nng_pipe_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 _p_ does not refer to an open pipe.
+`NNG_ENOTSUP`:: The option _opt_ is not supported.
+`NNG_ENOMEM`:: Insufficient memory exists.
+`NNG_EINVAL`:: Size of destination _val_ too small for object.
+`NNG_EWRITEONLY`:: The option _opt_ is write-only.
+
+== SEE ALSO
+
+[.text-left]
+<<nng_dialer_set.3#,nng_dialer_set(3)>>
+<<nng_socket_get.3#,nng_socket_get(3)>>,
+<<nng_listener_set.3#,nng_listener_set(3)>>
+<<nng_msg_get_pipe.3#,nng_msg_get_pipe(3)>>
+<<nng_strdup.3#,nng_strdup(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_strfree.3#,nng_strfree(3)>>,
+<<nng_duration.5#,nng_duration(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng_pipe.5#,nng_pipe(5)>>,
+<<nng_sockaddr.5#,nng_sockaddr(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_pipe_getopt.3.adoc b/docs/man/nng_pipe_getopt.3.adoc
index c8242be5..111aa493 100644
--- a/docs/man/nng_pipe_getopt.3.adoc
+++ b/docs/man/nng_pipe_getopt.3.adoc
@@ -1,6 +1,6 @@
= nng_pipe_getopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -36,10 +36,13 @@ int nng_pipe_getopt_string(nng_pipe p, const char *opt, char **strp);
int nng_pipe_getopt_size(nng_pipe p, const char *opt, size_t *zp);
int nng_pipe_getopt_uint64(nng_pipe p, const char *opt, uint64_t *u64p);
+
----
== DESCRIPTION
+NOTE: These functions are deprecated. Please see xref:nng_pipe_get.3.adoc[nng_pipe_get].
+
(((options, pipe)))
The `nng_pipe_getopt()` functions are used to retrieve option values for
the <<nng_pipe.5#,pipe>> _p_.
diff --git a/docs/man/nng_setopt.3.adoc b/docs/man/nng_setopt.3.adoc
index b3b1d3b5..1a3eb233 100644
--- a/docs/man/nng_setopt.3.adoc
+++ b/docs/man/nng_setopt.3.adoc
@@ -1,6 +1,6 @@
= nng_setopt(3)
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// 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
@@ -34,9 +34,13 @@ int nng_setopt_size(nng_socket s, const char *opt, size_t z);
int nng_setopt_string(nng_socket s, const char *opt, const char *str);
int nng_setopt_uint64(nng_socket s, const char *opt, uint64_t u64);
+
----
== DESCRIPTION
+
+NOTE: These functions are deprecated. Please see xref:nng_socket_set.3.adoc[nng_socket_set].
+
(((options, socket)))
The `nng_setopt()` functions are used to configure options for
the socket _s_.
diff --git a/docs/man/nng_socket_get.3.adoc b/docs/man/nng_socket_get.3.adoc
new file mode 100644
index 00000000..d077207d
--- /dev/null
+++ b/docs/man/nng_socket_get.3.adoc
@@ -0,0 +1,144 @@
+= nng_socket_get(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_socket_get - get socket option
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+int nng_socket_get(nng_socket s, const char *opt, void *val, size_t *valszp);
+
+int nng_socket_get_bool(nng_socket s, const char *opt, bool *bvalp);
+
+int nng_socket_get_int(nng_socket s, const char *opt, int *ivalp);
+
+int nng_socket_get_size(nng_socket s, const char *opt, size_t *zp);
+
+int nng_socket_get_uint64(nng_socket s, const char *opt, uint64_t *u64p);
+
+int nng_socket_get_string(nng_socket s, const char *opt, char **strp);
+
+int nng_socket_get_ptr(nng_socket s, const char *opt, void **ptr);
+
+int nng_socket_get_ms(nng_socket s, const char *opt, nng_duration *durp);
+
+int nng_socket_get_addr(nng_socket s, const char *opt, nng_sockaddr *addrp);
+
+----
+
+== DESCRIPTION
+
+(((options, socket)))
+The `nng_socket_get()` functions are used to retrieve option values for
+the <<nng_socket.5#,socket>> _s_.
+The actual options that may be retrieved in this way vary.
+A number of them are documented in <<nng_options.5#,nng_options(5)>>.
+
+Additionally transport-specific options and protocol-specific options are
+documented with the transports and protocols themselves.
+
+=== Forms
+
+In all of these forms, the option _opt_ is retrieved from the socket _s_.
+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_socket_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_socket_get_bool()`::
+This function is for options which take a Boolean (`bool`).
+The value will be stored at _bvalp_.
+
+`nng_socket_get_int()`::
+This function is for options which take an integer (`int`).
+The value will be stored at _ivalp_.
+
+`nng_socket_get_ms()`::
+This function is used to retrieve time <<nng_duration.5#,durations>>
+(such as timeouts), stored in _durp_ as a number of milliseconds.
+(The special value ((`NNG_DUR_INFINITE`)) means an infinite amount of time, and
+the special value ((`NNG_DUR_DEFAULT`)) means a context-specific default.)
+
+`nng_socket_get_ptr()`::
+This function is used to retrieve a pointer, _ptr_, to structured data.
+The data referenced by _ptr_ is generally managed using other functions.
+Note that this form is somewhat special in that the object is generally
+not copied, but instead the *pointer* to the object is copied.
+
+`nng_socket_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_socket_get_string()`::
+This function is used to retrieve a string into _strp_.
+This string is created from the source using `<<nng_strdup.3#,nng_strdup()>>`
+and consequently must be freed by the caller using
+`<<nng_strfree.3#,nng_strfree()>>` when it is no longer needed.
+
+`nng_socket_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]
+<<nng_dialer_get.3#,nng_dialer_get(3)>>,
+<<nng_listener_get.3#,nng_listener_get(3)>>,
+<<nng_pipe_get.3#,nng_pipe_get(3)>>,
+<<nng_socket_set.3#,nng_socket_set(3)>>,
+<<nng_strdup.3#,nng_strdup(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_strfree.3#,nng_strfree(3)>>,
+<<nng_duration.5#,nng_duration(5)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng_socket.5#,nng_socket(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/docs/man/nng_socket_set.3.adoc b/docs/man/nng_socket_set.3.adoc
new file mode 100644
index 00000000..bb84861a
--- /dev/null
+++ b/docs/man/nng_socket_set.3.adoc
@@ -0,0 +1,124 @@
+= nng_socket_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_socket_set - set socket option
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+int nng_socket_set(nng_socket s, const char *opt, const void *val, size_t valsz);
+
+int nng_socket_set_bool(nng_socket s, const char *opt, bool bval);
+
+int nng_socket_set_int(nng_socket s, const char *opt, int ival);
+
+int nng_socket_set_ms(nng_socket s, const char *opt, nng_duration dur);
+
+int nng_socket_set_ptr(nng_socket s, const char *opt, void *ptr);
+
+int nng_socket_set_size(nng_socket s, const char *opt, size_t z);
+
+int nng_socket_set_string(nng_socket s, const char *opt, const char *str);
+
+int nng_socket_set_uint64(nng_socket s, const char *opt, uint64_t u64);
+
+----
+
+== DESCRIPTION
+(((options, socket)))
+The `nng_socket_set()` functions are used to configure options for
+the socket _s_.
+The actual options that may be configured in this way vary, and are
+specified by _opt_.
+A number of them are documented in <<nng_options.5#,nng_options(5)>>.
+
+Additionally some transport-specific and protocol-specific options are
+documented with the transports and protocols themselves.
+
+=== 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_socket_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_socket_set_bool()`::
+This function is for options which take a Boolean (`bool`).
+The _bval_ is passed to the option.
+
+`nng_socket_set_int()`::
+This function is for options which take an integer (`int`).
+The _ival_ is passed to the option.
+
+`nng_socket_set_ms()`::
+This function is used to configure time durations (such as timeouts) using
+type `<<nng_duration.5#,nng_duration>>`.
+The duration _dur_ is an integer number of milliseconds.
+
+`nng_socket_set_ptr()`::
+This function is used to pass a pointer, _ptr_, to structured data.
+The data referenced by _ptr_ is generally managed by other functions.
+For example, TLS configuration objects created with
+(`<<nng_tls_config_alloc.3tls#,nng_tls_config_alloc()>>`)
+can be passed this way.
+
+NOTE: This form is somewhat special in that the object is generally
+not copied, but instead the *pointer* to the object is copied.
+
+`nng_socket_set_size()`::
+This function is used to configure a size, _z_, typically for buffer sizes,
+message maximum sizes, and similar options.
+
+`nng_socket_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_socket_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]
+<<nng_socket_get.3#,nng_socket_get(3)>>,
+<<nng_dialer_set.3#,nng_dialer_set(3)>>,
+<<nng_listener_set.3#,nng_listener_set(3)>>,
+<<nng_strerror.3#,nng_strerror(3)>>,
+<<nng_options.5#,nng_options(5)>>,
+<<nng_socket.5#,nng_socket(5)>>,
+<<nng.7#,nng(7)>>
diff --git a/include/nng/nng.h b/include/nng/nng.h
index 77709838..fcc95668 100644
--- a/include/nng/nng.h
+++ b/include/nng/nng.h
@@ -220,6 +220,31 @@ NNG_DECL int nng_getopt_size(nng_socket, const char *, size_t *);
NNG_DECL int nng_getopt_uint64(nng_socket, const char *, uint64_t *);
NNG_DECL int nng_getopt_ptr(nng_socket, const char *, void **);
+// nng_getopt_string is special -- it allocates a string to hold the
+// resulting string, which should be freed with nng_strfree when it is
+// no logner needed.
+NNG_DECL int nng_getopt_string(nng_socket, const char *, char **);
+
+NNG_DECL int nng_socket_set(nng_socket, const char *, const void *, size_t);
+NNG_DECL int nng_socket_set_bool(nng_socket, const char *, bool);
+NNG_DECL int nng_socket_set_int(nng_socket, const char *, int);
+NNG_DECL int nng_socket_set_size(nng_socket, const char *, size_t);
+NNG_DECL int nng_socket_set_uint64(nng_socket, const char *, uint64_t);
+NNG_DECL int nng_socket_set_string(nng_socket, const char *, const char *);
+NNG_DECL int nng_socket_set_ptr(nng_socket, const char *, void *);
+NNG_DECL int nng_socket_set_ms(nng_socket, const char *, nng_duration);
+NNG_DECL int nng_socket_set_addr(nng_socket, const char *, const nng_sockaddr *);
+
+NNG_DECL int nng_socket_get(nng_socket, const char *, void *, size_t *);
+NNG_DECL int nng_socket_get_bool(nng_socket, const char *, bool *);
+NNG_DECL int nng_socket_get_int(nng_socket, const char *, int *);
+NNG_DECL int nng_socket_get_size(nng_socket, const char *, size_t *);
+NNG_DECL int nng_socket_get_uint64(nng_socket, const char *, uint64_t *);
+NNG_DECL int nng_socket_get_string(nng_socket, const char *, char **);
+NNG_DECL int nng_socket_get_ptr(nng_socket, const char *, void **);
+NNG_DECL int nng_socket_get_ms(nng_socket, const char *, nng_duration *);
+NNG_DECL int nng_socket_get_addr(nng_socket, const char *, nng_sockaddr *);
+
// Arguably the pipe callback functions could be handled as an option,
// but with the need to specify an argument, we find it best to unify
// this as a separate function to pass in the argument and the callback.
@@ -239,11 +264,6 @@ typedef void (*nng_pipe_cb)(nng_pipe, nng_pipe_ev, void *);
// multiple times. Each event can have at most one callback registered.
NNG_DECL int nng_pipe_notify(nng_socket, nng_pipe_ev, nng_pipe_cb, void *);
-// nng_getopt_string is special -- it allocates a string to hold the
-// resulting string, which should be freed with nng_strfree when it is
-// no logner needed.
-NNG_DECL int nng_getopt_string(nng_socket, const char *, char **);
-
// nng_listen creates a listening endpoint with no special options,
// and starts it listening. It is functionally equivalent to the legacy
// nn_bind(). The underlying endpoint is returned back to the caller in the
@@ -321,6 +341,26 @@ NNG_DECL int nng_dialer_getopt_ptr(nng_dialer, const char *, void **);
// no logner needed.
NNG_DECL int nng_dialer_getopt_string(nng_dialer, const char *, char **);
+NNG_DECL int nng_dialer_set(nng_dialer, const char *, const void *, size_t);
+NNG_DECL int nng_dialer_set_bool(nng_dialer, const char *, bool);
+NNG_DECL int nng_dialer_set_int(nng_dialer, const char *, int);
+NNG_DECL int nng_dialer_set_size(nng_dialer, const char *, size_t);
+NNG_DECL int nng_dialer_set_uint64(nng_dialer, const char *, uint64_t);
+NNG_DECL int nng_dialer_set_string(nng_dialer, const char *, const char *);
+NNG_DECL int nng_dialer_set_ptr(nng_dialer, const char *, void *);
+NNG_DECL int nng_dialer_set_ms(nng_dialer, const char *, nng_duration);
+NNG_DECL int nng_dialer_set_addr(nng_dialer, const char *, const nng_sockaddr *);
+
+NNG_DECL int nng_dialer_get(nng_dialer, const char *, void *, size_t *);
+NNG_DECL int nng_dialer_get_bool(nng_dialer, const char *, bool *);
+NNG_DECL int nng_dialer_get_int(nng_dialer, const char *, int *);
+NNG_DECL int nng_dialer_get_size(nng_dialer, const char *, size_t *);
+NNG_DECL int nng_dialer_get_uint64(nng_dialer, const char *, uint64_t *);
+NNG_DECL int nng_dialer_get_string(nng_dialer, const char *, char **);
+NNG_DECL int nng_dialer_get_ptr(nng_dialer, const char *, void **);
+NNG_DECL int nng_dialer_get_ms(nng_dialer, const char *, nng_duration *);
+NNG_DECL int nng_dialer_get_addr(nng_dialer, const char *, nng_sockaddr *);
+
// nng_listener_setopt sets an option for a dialer. This value is
// not stored in the socket. Subsequent setopts on the socket may
// override these value however. Note listener options may not be altered
@@ -356,6 +396,28 @@ NNG_DECL int nng_listener_getopt_ptr(nng_listener, const char *, void **);
// no logner needed.
NNG_DECL int nng_listener_getopt_string(nng_listener, const char *, char **);
+NNG_DECL int nng_listener_set(
+ nng_listener, const char *, const void *, size_t);
+NNG_DECL int nng_listener_set_bool(nng_listener, const char *, bool);
+NNG_DECL int nng_listener_set_int(nng_listener, const char *, int);
+NNG_DECL int nng_listener_set_size(nng_listener, const char *, size_t);
+NNG_DECL int nng_listener_set_uint64(nng_listener, const char *, uint64_t);
+NNG_DECL int nng_listener_set_string(
+ nng_listener, const char *, const char *);
+NNG_DECL int nng_listener_set_ptr(nng_listener, const char *, void *);
+NNG_DECL int nng_listener_set_ms(nng_listener, const char *, nng_duration);
+NNG_DECL int nng_listener_set_addr(nng_listener, const char *, const nng_sockaddr *);
+
+NNG_DECL int nng_listener_get(nng_listener, const char *, void *, size_t *);
+NNG_DECL int nng_listener_get_bool(nng_listener, const char *, bool *);
+NNG_DECL int nng_listener_get_int(nng_listener, const char *, int *);
+NNG_DECL int nng_listener_get_size(nng_listener, const char *, size_t *);
+NNG_DECL int nng_listener_get_uint64(nng_listener, const char *, uint64_t *);
+NNG_DECL int nng_listener_get_string(nng_listener, const char *, char **);
+NNG_DECL int nng_listener_get_ptr(nng_listener, const char *, void **);
+NNG_DECL int nng_listener_get_ms(nng_listener, const char *, nng_duration *);
+NNG_DECL int nng_listener_get_addr(nng_listener, const char *, nng_sockaddr *);
+
// nng_strerror returns a human readable string associated with the error
// code supplied.
NNG_DECL const char *nng_strerror(int);
@@ -455,6 +517,26 @@ NNG_DECL int nng_ctx_setopt_int(nng_ctx, const char *, int);
NNG_DECL int nng_ctx_setopt_ms(nng_ctx, const char *, nng_duration);
NNG_DECL int nng_ctx_setopt_size(nng_ctx, const char *, size_t);
+NNG_DECL int nng_ctx_get(nng_ctx, const char *, void *, size_t *);
+NNG_DECL int nng_ctx_get_bool(nng_ctx, const char *, bool *);
+NNG_DECL int nng_ctx_get_int(nng_ctx, const char *, int *);
+NNG_DECL int nng_ctx_get_size(nng_ctx, const char *, size_t *);
+NNG_DECL int nng_ctx_get_uint64(nng_ctx, const char *, uint64_t *);
+NNG_DECL int nng_ctx_get_string(nng_ctx, const char *, char **);
+NNG_DECL int nng_ctx_get_ptr(nng_ctx, const char *, void **);
+NNG_DECL int nng_ctx_get_ms(nng_ctx, const char *, nng_duration *);
+NNG_DECL int nng_ctx_get_addr(nng_ctx, const char *, nng_sockaddr *);
+
+NNG_DECL int nng_ctx_set(nng_ctx, const char *, const void *, size_t);
+NNG_DECL int nng_ctx_set_bool(nng_ctx, const char *, bool);
+NNG_DECL int nng_ctx_set_int(nng_ctx, const char *, int);
+NNG_DECL int nng_ctx_set_size(nng_ctx, const char *, size_t);
+NNG_DECL int nng_ctx_set_uint64(nng_ctx, const char *, uint64_t);
+NNG_DECL int nng_ctx_set_string(nng_ctx, const char *, const char *);
+NNG_DECL int nng_ctx_set_ptr(nng_ctx, const char *, void *);
+NNG_DECL int nng_ctx_set_ms(nng_ctx, const char *, nng_duration);
+NNG_DECL int nng_ctx_set_addr(nng_ctx, const char *, const nng_sockaddr *);
+
// nng_alloc is used to allocate memory. It's intended purpose is for
// allocating memory suitable for message buffers with nng_send().
// Applications that need memory for other purposes should use their platform
@@ -653,6 +735,17 @@ NNG_DECL int nng_pipe_getopt_sockaddr(nng_pipe, const char *, nng_sockaddr *);
NNG_DECL int nng_pipe_getopt_uint64(nng_pipe, const char *, uint64_t *);
NNG_DECL int nng_pipe_getopt_ptr(nng_pipe, const char *, void **);
NNG_DECL int nng_pipe_getopt_string(nng_pipe, const char *, char **);
+
+NNG_DECL int nng_pipe_get(nng_pipe, const char *, void *, size_t *);
+NNG_DECL int nng_pipe_get_bool(nng_pipe, const char *, bool *);
+NNG_DECL int nng_pipe_get_int(nng_pipe, const char *, int *);
+NNG_DECL int nng_pipe_get_ms(nng_pipe, const char *, nng_duration *);
+NNG_DECL int nng_pipe_get_size(nng_pipe, const char *, size_t *);
+NNG_DECL int nng_pipe_get_uint64(nng_pipe, const char *, uint64_t *);
+NNG_DECL int nng_pipe_get_string(nng_pipe, const char *, char **);
+NNG_DECL int nng_pipe_get_ptr(nng_pipe, const char *, void **);
+NNG_DECL int nng_pipe_get_addr(nng_pipe, const char *, nng_sockaddr *);
+
NNG_DECL int nng_pipe_close(nng_pipe);
NNG_DECL int nng_pipe_id(nng_pipe);
NNG_DECL nng_socket nng_pipe_socket(nng_pipe);
diff --git a/src/core/options.h b/src/core/options.h
index 7b66dbfb..6df05805 100644
--- a/src/core/options.h
+++ b/src/core/options.h
@@ -90,4 +90,174 @@ extern int nni_setopt(
extern int nni_chkopt(
const nni_chkoption *, const char *, const void *, size_t, nni_type);
+//
+// This next block sets up to define the various typed option functions.
+// To make it easier to cover them all at once, we use macros.
+//
+
+#define NNI_DEFGET(base, pointer) \
+ int nng_##base##_get( \
+ nng_##base pointer s, const char *nm, void *vp, size_t *szp) \
+ { \
+ return (nni_##base##_getx(s, nm, vp, szp, NNI_TYPE_OPAQUE)); \
+ }
+
+#define NNI_DEFTYPEDGET(base, suffix, pointer, type, nnitype) \
+ int nng_##base##_get_##suffix( \
+ nng_##base pointer s, const char *nm, type *vp) \
+ { \
+ size_t sz = sizeof(*vp); \
+ return (nni_##base##_getx(s, nm, vp, &sz, nnitype)); \
+ }
+
+#define NNI_DEFGETALL(base) \
+ NNI_DEFGET(base, ) \
+ NNI_DEFTYPEDGET(base, int, , int, NNI_TYPE_INT32) \
+ NNI_DEFTYPEDGET(base, bool, , bool, NNI_TYPE_BOOL) \
+ NNI_DEFTYPEDGET(base, size, , size_t, NNI_TYPE_SIZE) \
+ NNI_DEFTYPEDGET(base, uint64, , uint64_t, NNI_TYPE_UINT64) \
+ NNI_DEFTYPEDGET(base, string, , char *, NNI_TYPE_STRING) \
+ NNI_DEFTYPEDGET(base, ptr, , void *, NNI_TYPE_POINTER) \
+ NNI_DEFTYPEDGET(base, ms, , nng_duration, NNI_TYPE_DURATION) \
+ NNI_DEFTYPEDGET(base, addr, , nng_sockaddr, NNI_TYPE_SOCKADDR)
+
+#define NNI_DEFGETALL_PTR(base) \
+ NNI_DEFGET(base, *) \
+ NNI_DEFTYPEDGET(base, int, *, int, NNI_TYPE_INT32) \
+ NNI_DEFTYPEDGET(base, bool, *, bool, NNI_TYPE_BOOL) \
+ NNI_DEFTYPEDGET(base, size, *, size_t, NNI_TYPE_SIZE) \
+ NNI_DEFTYPEDGET(base, uint64, *, uint64_t, NNI_TYPE_UINT64) \
+ NNI_DEFTYPEDGET(base, string, *, char *, NNI_TYPE_STRING) \
+ NNI_DEFTYPEDGET(base, ptr, *, void *, NNI_TYPE_POINTER) \
+ NNI_DEFTYPEDGET(base, ms, *, nng_duration, NNI_TYPE_DURATION) \
+ NNI_DEFTYPEDGET(base, addr, *, nng_sockaddr, NNI_TYPE_SOCKADDR)
+
+#define NNI_DEFSET(base, pointer) \
+ int nng_##base##_set( \
+ nng_##base pointer s, const char *nm, const void *vp, size_t sz) \
+ { \
+ return (nni_##base##_setx(s, nm, vp, sz, NNI_TYPE_OPAQUE)); \
+ }
+
+#define NNI_DEFTYPEDSETEX(base, suffix, pointer, type, len, nnitype) \
+ int nng_##base##_set_##suffix( \
+ nng_##base pointer s, const char *nm, type v) \
+ { \
+ return (nni_##base##_setx(s, nm, &v, len, nnitype)); \
+ }
+
+#define NNI_DEFTYPEDSET(base, suffix, pointer, type, nnitype) \
+ int nng_##base##_set_##suffix( \
+ nng_##base pointer s, const char *nm, type v) \
+ { \
+ return (nni_##base##_setx(s, nm, &v, sizeof(v), nnitype)); \
+ }
+
+#define NNI_DEFSTRINGSET(base, pointer) \
+ int nng_##base##_set_string( \
+ nng_##base pointer s, const char *nm, const char *v) \
+ { \
+ return (nni_##base##_setx(s, nm, v, \
+ v != NULL ? strlen(v) + 1 : 0, NNI_TYPE_STRING)); \
+ }
+
+#define NNI_DEFSOCKADDRSET(base, pointer) \
+ int nng_##base##_set_addr( \
+ nng_##base pointer s, const char *nm, const nng_sockaddr *v) \
+ { \
+ return (nni_##base##_setx( \
+ s, nm, v, sizeof(*v), NNI_TYPE_SOCKADDR)); \
+ }
+
+#define NNI_DEFSETALL(base) \
+ NNI_DEFSET(base, ) \
+ NNI_DEFTYPEDSET(base, int, , int, NNI_TYPE_INT32) \
+ NNI_DEFTYPEDSET(base, bool, , bool, NNI_TYPE_BOOL) \
+ NNI_DEFTYPEDSET(base, size, , size_t, NNI_TYPE_SIZE) \
+ NNI_DEFTYPEDSET(base, uint64, , uint64_t, NNI_TYPE_UINT64) \
+ NNI_DEFTYPEDSET(base, ms, , nng_duration, NNI_TYPE_DURATION) \
+ NNI_DEFTYPEDSET(base, ptr, , void *, NNI_TYPE_POINTER) \
+ NNI_DEFSTRINGSET(base, ) \
+ NNI_DEFSOCKADDRSET(base, )
+
+#define NNI_DEFSETALL_PTR(base) \
+ NNI_DEFSET(base, *) \
+ NNI_DEFTYPEDSET(base, int, *, int, NNI_TYPE_INT32) \
+ NNI_DEFTYPEDSET(base, bool, *, bool, NNI_TYPE_BOOL) \
+ NNI_DEFTYPEDSET(base, size, *, size_t, NNI_TYPE_SIZE) \
+ NNI_DEFTYPEDSET(base, uint64, *, uint64_t, NNI_TYPE_UINT64) \
+ NNI_DEFTYPEDSET(base, ms, *, nng_duration, NNI_TYPE_DURATION) \
+ NNI_DEFTYPEDSET(base, ptr, *, void *, NNI_TYPE_POINTER) \
+ NNI_DEFSTRINGSET(base, *) \
+ NNI_DEFSOCKADDRSET(base, *)
+
+#define NNI_LEGACY_DEFGET(base) \
+ int nng_##base##_getopt( \
+ nng_##base s, const char *nm, void *vp, size_t *szp) \
+ { \
+ return (nng_##base##_get(s, nm, vp, szp)); \
+ }
+
+#define NNI_LEGACY_DEFTYPEDGET(base, suffix, type) \
+ int nng_##base##_getopt_##suffix( \
+ nng_##base s, const char *nm, type *vp) \
+ { \
+ return (nng_##base##_get_##suffix(s, nm, vp)); \
+ }
+
+#define NNI_LEGACY_DEFSOCKADDRGET(base) \
+ int nng_##base##_getopt_sockaddr( \
+ nng_##base s, const char *nm, nng_sockaddr *vp) \
+ { \
+ return (nng_##base##_get_addr(s, nm, vp)); \
+ }
+
+#define NNI_LEGACY_DEFGETALL(base) \
+ NNI_LEGACY_DEFGET(base) \
+ NNI_LEGACY_DEFTYPEDGET(base, int, int) \
+ NNI_LEGACY_DEFTYPEDGET(base, bool, bool) \
+ NNI_LEGACY_DEFTYPEDGET(base, size, size_t) \
+ NNI_LEGACY_DEFTYPEDGET(base, uint64, uint64_t) \
+ NNI_LEGACY_DEFTYPEDGET(base, string, char *) \
+ NNI_LEGACY_DEFTYPEDGET(base, ptr, void *) \
+ NNI_LEGACY_DEFTYPEDGET(base, ms, nng_duration) \
+ NNI_LEGACY_DEFSOCKADDRGET(base)
+
+#define NNI_LEGACY_DEFSET(base) \
+ int nng_##base##_setopt( \
+ nng_##base s, const char *nm, const void *vp, size_t sz) \
+ { \
+ return (nng_##base##_set(s, nm, vp, sz)); \
+ }
+
+#define NNI_LEGACY_DEFTYPEDSET(base, suffix, type) \
+ int nng_##base##_setopt_##suffix(nng_##base s, const char *nm, type v) \
+ { \
+ return (nng_##base##_set_##suffix(s, nm, v)); \
+ }
+
+#define NNI_LEGACY_DEFSTRINGSET(base) \
+ int nng_##base##_setopt_string( \
+ nng_##base s, const char *nm, const char *v) \
+ { \
+ return (nng_##base##_set_string(s, nm, v)); \
+ }
+
+#define NNI_LEGACY_DEFSOCKADDRSET(base) \
+ int nng_##base##_setopt_sockaddr( \
+ nng_##base s, const char *nm, const nng_sockaddr *v) \
+ { \
+ return (nng_##base##_set_addr(s, nm, v)); \
+ }
+
+#define NNI_LEGACY_DEFSETALL(base) \
+ NNI_LEGACY_DEFSET(base) \
+ NNI_LEGACY_DEFTYPEDSET(base, int, int) \
+ NNI_LEGACY_DEFTYPEDSET(base, bool, bool) \
+ NNI_LEGACY_DEFTYPEDSET(base, size, size_t) \
+ NNI_LEGACY_DEFTYPEDSET(base, ms, nng_duration) \
+ NNI_LEGACY_DEFTYPEDSET(base, ptr, void*) \
+ NNI_LEGACY_DEFSTRINGSET(base) \
+ NNI_LEGACY_DEFSOCKADDRSET(base)
+
#endif // CORE_OPTIONS_H
diff --git a/src/core/stream.c b/src/core/stream.c
index c0dc38d6..e7ebc4e0 100644
--- a/src/core/stream.c
+++ b/src/core/stream.c
@@ -282,86 +282,10 @@ nni_stream_checkopt(const char *scheme, const char *name, const void *data,
return (NNG_ENOTSUP);
}
-//
-// This next block sets up to define the various typed option functions.
-// To make it easier to cover them all at once, we use macros.
-//
-
-#define DEFGET(base) \
- int nng_##base##_get( \
- nng_##base *s, const char *nm, void *vp, size_t *szp) \
- { \
- return (nni_##base##_getx(s, nm, vp, szp, NNI_TYPE_OPAQUE)); \
- }
-
-#define DEFTYPEDGET(base, suffix, type, nnitype) \
- int nng_##base##_get_##suffix( \
- nng_##base *s, const char *nm, type *vp) \
- { \
- size_t sz = sizeof(*vp); \
- return (nni_##base##_getx(s, nm, vp, &sz, nnitype)); \
- }
-
-#define DEFGETALL(base) \
- DEFGET(base) \
- DEFTYPEDGET(base, int, int, NNI_TYPE_INT32) \
- DEFTYPEDGET(base, bool, bool, NNI_TYPE_BOOL) \
- DEFTYPEDGET(base, size, size_t, NNI_TYPE_SIZE) \
- DEFTYPEDGET(base, uint64, uint64_t, NNI_TYPE_UINT64) \
- DEFTYPEDGET(base, string, char *, NNI_TYPE_STRING) \
- DEFTYPEDGET(base, ptr, void *, NNI_TYPE_POINTER) \
- DEFTYPEDGET(base, ms, nng_duration, NNI_TYPE_DURATION) \
- DEFTYPEDGET(base, addr, nng_sockaddr, NNI_TYPE_SOCKADDR)
-
-DEFGETALL(stream)
-DEFGETALL(stream_dialer)
-DEFGETALL(stream_listener)
-
-#define DEFSET(base) \
- int nng_##base##_set( \
- nng_##base *s, const char *nm, const void *vp, size_t sz) \
- { \
- return (nni_##base##_setx(s, nm, vp, sz, NNI_TYPE_OPAQUE)); \
- }
-
-#define DEFTYPEDSETEX(base, suffix, type, len, nnitype) \
- int nng_##base##_set_##suffix(nng_##base *s, const char *nm, type v) \
- { \
- return (nni_##base##_setx(s, nm, &v, len, nnitype)); \
- }
-
-#define DEFTYPEDSET(base, suffix, type, nnitype) \
- int nng_##base##_set_##suffix(nng_##base *s, const char *nm, type v) \
- { \
- return (nni_##base##_setx(s, nm, &v, sizeof(v), nnitype)); \
- }
-
-#define DEFSTRINGSET(base) \
- int nng_##base##_set_string( \
- nng_##base *s, const char *nm, const char *v) \
- { \
- return (nni_##base##_setx(s, nm, v, \
- v != NULL ? strlen(v) + 1 : 0, NNI_TYPE_STRING)); \
- }
-
-#define DEFSOCKADDRSET(base) \
- int nng_##base##_set_adddr( \
- nng_##base *s, const char *nm, const nng_sockaddr *v) \
- { \
- return (nni_##base##_setx( \
- s, nm, v, sizeof(*v), NNI_TYPE_SOCKADDR)); \
- }
+NNI_DEFGETALL_PTR(stream)
+NNI_DEFGETALL_PTR(stream_dialer)
+NNI_DEFGETALL_PTR(stream_listener)
-#define DEFSETALL(base) \
- DEFSET(base) \
- DEFTYPEDSET(base, int, int, NNI_TYPE_INT32) \
- DEFTYPEDSET(base, bool, bool, NNI_TYPE_BOOL) \
- DEFTYPEDSET(base, size, size_t, NNI_TYPE_SIZE) \
- DEFTYPEDSET(base, ms, nng_duration, NNI_TYPE_DURATION) \
- DEFTYPEDSET(base, ptr, void *, NNI_TYPE_POINTER) \
- DEFSTRINGSET(base) \
- DEFSOCKADDRSET(base)
-
-DEFSETALL(stream)
-DEFSETALL(stream_dialer)
-DEFSETALL(stream_listener) \ No newline at end of file
+NNI_DEFSETALL_PTR(stream)
+NNI_DEFSETALL_PTR(stream_dialer)
+NNI_DEFSETALL_PTR(stream_listener) \ No newline at end of file
diff --git a/src/nng.c b/src/nng.c
index abbf9c62..07adc64e 100644
--- a/src/nng.c
+++ b/src/nng.c
@@ -318,7 +318,7 @@ nng_ctx_send(nng_ctx cid, nng_aio *aio)
}
static int
-nng_ctx_getx(nng_ctx id, const char *n, void *v, size_t *szp, nni_type t)
+nni_ctx_getx(nng_ctx id, const char *n, void *v, size_t *szp, nni_type t)
{
nni_ctx *ctx;
int rv;
@@ -334,42 +334,8 @@ nng_ctx_getx(nng_ctx id, const char *n, void *v, size_t *szp, nni_type t)
return (rv);
}
-int
-nng_ctx_getopt(nng_ctx id, const char *name, void *val, size_t *szp)
-{
- return (nng_ctx_getx(id, name, val, szp, NNI_TYPE_OPAQUE));
-}
-
-int
-nng_ctx_getopt_bool(nng_ctx id, const char *name, bool *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_ctx_getx(id, name, vp, &sz, NNI_TYPE_BOOL));
-}
-
-int
-nng_ctx_getopt_int(nng_ctx id, const char *name, int *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_ctx_getx(id, name, vp, &sz, NNI_TYPE_INT32));
-}
-
-int
-nng_ctx_getopt_size(nng_ctx id, const char *name, size_t *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_ctx_getx(id, name, vp, &sz, NNI_TYPE_SIZE));
-}
-
-int
-nng_ctx_getopt_ms(nng_ctx id, const char *name, nng_duration *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_ctx_getx(id, name, vp, &sz, NNI_TYPE_DURATION));
-}
-
static int
-nng_ctx_setx(nng_ctx id, const char *n, const void *v, size_t sz, nni_type t)
+nni_ctx_setx(nng_ctx id, const char *n, const void *v, size_t sz, nni_type t)
{
nni_ctx *ctx;
int rv;
@@ -385,35 +351,8 @@ nng_ctx_setx(nng_ctx id, const char *n, const void *v, size_t sz, nni_type t)
return (rv);
}
-int
-nng_ctx_setopt(nng_ctx id, const char *name, const void *val, size_t sz)
-{
- return (nng_ctx_setx(id, name, val, sz, NNI_TYPE_OPAQUE));
-}
-
-int
-nng_ctx_setopt_bool(nng_ctx id, const char *name, bool v)
-{
- return (nng_ctx_setx(id, name, &v, sizeof(v), NNI_TYPE_BOOL));
-}
-
-int
-nng_ctx_setopt_int(nng_ctx id, const char *name, int v)
-{
- return (nng_ctx_setx(id, name, &v, sizeof(v), NNI_TYPE_INT32));
-}
-
-int
-nng_ctx_setopt_size(nng_ctx id, const char *name, size_t v)
-{
- return (nng_ctx_setx(id, name, &v, sizeof(v), NNI_TYPE_SIZE));
-}
-
-int
-nng_ctx_setopt_ms(nng_ctx id, const char *name, nng_duration v)
-{
- return (nng_ctx_setx(id, name, &v, sizeof(v), NNI_TYPE_DURATION));
-}
+NNI_LEGACY_DEFGETALL(ctx)
+NNI_LEGACY_DEFSETALL(ctx)
int
nng_dial(nng_socket sid, const char *addr, nng_dialer *dp, int flags)
@@ -559,7 +498,7 @@ nng_dialer_id(nng_dialer d)
}
static int
-nng_dialer_setx(
+nni_dialer_setx(
nng_dialer did, const char *n, const void *v, size_t sz, nni_type t)
{
nni_dialer *d;
@@ -577,7 +516,7 @@ nng_dialer_setx(
}
static int
-nng_dialer_getx(
+nni_dialer_getx(
nng_dialer did, const char *n, void *v, size_t *szp, nni_type t)
{
nni_dialer *d;
@@ -594,118 +533,11 @@ nng_dialer_getx(
return (rv);
}
-int
-nng_dialer_setopt(nng_dialer d, const char *name, const void *v, size_t sz)
-{
- return (nng_dialer_setx(d, name, v, sz, NNI_TYPE_OPAQUE));
-}
-
-int
-nng_dialer_setopt_bool(nng_dialer d, const char *name, bool v)
-{
- return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_BOOL));
-}
+NNI_LEGACY_DEFGETALL(dialer)
+NNI_LEGACY_DEFSETALL(dialer)
int
-nng_dialer_setopt_int(nng_dialer d, const char *name, int v)
-{
- return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_INT32));
-}
-
-int
-nng_dialer_setopt_size(nng_dialer d, const char *name, size_t v)
-{
- return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_SIZE));
-}
-
-int
-nng_dialer_setopt_ms(nng_dialer d, const char *name, nng_duration v)
-{
- return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_DURATION));
-}
-
-int
-nng_dialer_setopt_uint64(nng_dialer d, const char *name, uint64_t v)
-{
- return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_UINT64));
-}
-
-int
-nng_dialer_setopt_ptr(nng_dialer d, const char *name, void *v)
-{
- return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_POINTER));
-}
-
-int
-nng_dialer_setopt_string(nng_dialer d, const char *name, const char *v)
-{
- return (nng_dialer_setx(d, name, v, strlen(v) + 1, NNI_TYPE_STRING));
-}
-
-int
-nng_dialer_getopt(nng_dialer d, const char *name, void *val, size_t *szp)
-{
- return (nng_dialer_getx(d, name, val, szp, NNI_TYPE_OPAQUE));
-}
-
-int
-nng_dialer_getopt_bool(nng_dialer d, const char *name, bool *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_BOOL));
-}
-
-int
-nng_dialer_getopt_int(nng_dialer d, const char *name, int *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_INT32));
-}
-
-int
-nng_dialer_getopt_size(nng_dialer d, const char *name, size_t *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_SIZE));
-}
-
-int
-nng_dialer_getopt_sockaddr(nng_dialer d, const char *name, nng_sockaddr *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_SOCKADDR));
-}
-
-int
-nng_dialer_getopt_uint64(nng_dialer d, const char *name, uint64_t *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_UINT64));
-}
-
-int
-nng_dialer_getopt_ptr(nng_dialer d, const char *name, void **vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_POINTER));
-}
-
-int
-nng_dialer_getopt_string(nng_dialer d, const char *name, char **vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_STRING));
-}
-
-int
-nng_dialer_getopt_ms(nng_dialer d, const char *name, nng_duration *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_DURATION));
-}
-
-int
-nng_listener_setx(
+nni_listener_setx(
nng_listener lid, const char *name, const void *v, size_t sz, nni_type t)
{
nni_listener *l;
@@ -723,55 +555,7 @@ nng_listener_setx(
}
int
-nng_listener_setopt(nng_listener l, const char *name, const void *v, size_t sz)
-{
- return (nng_listener_setx(l, name, v, sz, NNI_TYPE_OPAQUE));
-}
-
-int
-nng_listener_setopt_bool(nng_listener l, const char *name, bool v)
-{
- return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_BOOL));
-}
-
-int
-nng_listener_setopt_int(nng_listener l, const char *name, int v)
-{
- return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_INT32));
-}
-
-int
-nng_listener_setopt_size(nng_listener l, const char *name, size_t v)
-{
- return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_SIZE));
-}
-
-int
-nng_listener_setopt_ms(nng_listener l, const char *name, nng_duration v)
-{
- return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_DURATION));
-}
-
-int
-nng_listener_setopt_uint64(nng_listener l, const char *name, uint64_t v)
-{
- return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_UINT64));
-}
-
-int
-nng_listener_setopt_ptr(nng_listener l, const char *name, void *v)
-{
- return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_POINTER));
-}
-
-int
-nng_listener_setopt_string(nng_listener l, const char *n, const char *v)
-{
- return (nng_listener_setx(l, n, v, strlen(v) + 1, NNI_TYPE_STRING));
-}
-
-int
-nng_listener_getx(
+nni_listener_getx(
nng_listener lid, const char *name, void *v, size_t *szp, nni_type t)
{
nni_listener *l;
@@ -788,68 +572,8 @@ nng_listener_getx(
return (rv);
}
-int
-nng_listener_getopt(nng_listener l, const char *name, void *v, size_t *szp)
-{
- return (nng_listener_getx(l, name, v, szp, NNI_TYPE_OPAQUE));
-}
-
-int
-nng_listener_getopt_bool(nng_listener l, const char *name, bool *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_BOOL));
-}
-
-int
-nng_listener_getopt_int(nng_listener l, const char *name, int *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_INT32));
-}
-
-int
-nng_listener_getopt_size(nng_listener l, const char *name, size_t *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_SIZE));
-}
-
-int
-nng_listener_getopt_sockaddr(
- nng_listener l, const char *name, nng_sockaddr *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_SOCKADDR));
-}
-
-int
-nng_listener_getopt_uint64(nng_listener l, const char *name, uint64_t *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_UINT64));
-}
-
-int
-nng_listener_getopt_ptr(nng_listener l, const char *name, void **vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_POINTER));
-}
-
-int
-nng_listener_getopt_string(nng_listener l, const char *name, char **vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_STRING));
-}
-
-int
-nng_listener_getopt_ms(nng_listener l, const char *name, nng_duration *vp)
-{
- size_t sz = sizeof(*vp);
- return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_DURATION));
-}
+NNI_LEGACY_DEFGETALL(listener)
+NNI_LEGACY_DEFSETALL(listener)
int
nng_dialer_close(nng_dialer did)
@@ -878,7 +602,7 @@ nng_listener_close(nng_listener lid)
}
static int
-nng_setx(
+nni_socket_setx(
nng_socket s, const char *name, const void *val, size_t sz, nni_type t)
{
nni_sock *sock;
@@ -898,11 +622,11 @@ nng_setx(
int
nng_setopt(nng_socket s, const char *name, const void *val, size_t sz)
{
- return (nng_setx(s, name, val, sz, NNI_TYPE_OPAQUE));
+ return (nng_socket_set(s, name, val, sz));
}
static int
-nng_getx(nng_socket s, const char *name, void *val, size_t *szp, nni_type t)
+nni_socket_getx(nng_socket s, const char *name, void *val, size_t *szp, nni_type t)
{
nni_sock *sock;
int rv;
@@ -921,99 +645,92 @@ nng_getx(nng_socket s, const char *name, void *val, size_t *szp, nni_type t)
int
nng_getopt(nng_socket s, const char *name, void *val, size_t *szp)
{
- return (nng_getx(s, name, val, szp, NNI_TYPE_OPAQUE));
+ return (nng_socket_get(s, name, val, szp));
}
// Convenience option wrappers.
int
nng_setopt_int(nng_socket s, const char *name, int val)
{
- return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_INT32));
+ return (nng_socket_set_int(s, name, val));
}
int
nng_setopt_bool(nng_socket s, const char *name, bool val)
{
- return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_BOOL));
+ return (nng_socket_set_bool(s, name, val));
}
int
nng_setopt_size(nng_socket s, const char *name, size_t val)
{
- return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_SIZE));
+ return (nng_socket_set_size(s, name, val));
}
int
nng_setopt_ms(nng_socket s, const char *name, nng_duration val)
{
- return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_DURATION));
+ return (nng_socket_set_ms(s, name, val));
}
int
nng_setopt_uint64(nng_socket s, const char *name, uint64_t val)
{
- return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_UINT64));
+ return (nng_socket_set_uint64(s, name, val));
}
int
nng_setopt_ptr(nng_socket s, const char *name, void *val)
{
- return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_POINTER));
+ return (nng_socket_set_ptr(s, name, val));
}
int
nng_setopt_string(nng_socket s, const char *name, const char *val)
{
- return (nng_setx(s, name, val, strlen(val) + 1, NNI_TYPE_STRING));
+ return (nng_socket_set_string(s, name, val));
}
int
nng_getopt_bool(nng_socket s, const char *name, bool *valp)
{
- size_t sz = sizeof(*valp);
- return (nng_getx(s, name, valp, &sz, NNI_TYPE_BOOL));
+ return (nng_socket_get_bool(s, name, valp));
}
int
nng_getopt_int(nng_socket s, const char *name, int *valp)
{
- size_t sz = sizeof(*valp);
- return (nng_getx(s, name, valp, &sz, NNI_TYPE_INT32));
+ return (nng_socket_get_int(s, name, valp));
}
int
nng_getopt_size(nng_socket s, const char *name, size_t *valp)
{
- size_t sz = sizeof(*valp);
- return (nng_getx(s, name, valp, &sz, NNI_TYPE_SIZE));
+ return (nng_socket_get_size(s, name, valp));
}
int
nng_getopt_uint64(nng_socket s, const char *name, uint64_t *valp)
{
- size_t sz = sizeof(*valp);
- return (nng_getx(s, name, valp, &sz, NNI_TYPE_UINT64));
+ return (nng_socket_get_uint64(s, name, valp));
}
int
nng_getopt_ms(nng_socket s, const char *name, nng_duration *valp)
{
- size_t sz = sizeof(*valp);
- return (nng_getx(s, name, valp, &sz, NNI_TYPE_DURATION));
+ return (nng_socket_get_ms(s, name, valp));
}
int
nng_getopt_ptr(nng_socket s, const char *name, void **valp)
{
- size_t sz = sizeof(*valp);
- return (nng_getx(s, name, valp, &sz, NNI_TYPE_DURATION));
+ return (nng_socket_get_ptr(s, name, valp));
}
int
nng_getopt_string(nng_socket s, const char *name, char **valp)
{
- size_t sz = sizeof(*valp);
- return (nng_getx(s, name, valp, &sz, NNI_TYPE_STRING));
+ return (nng_socket_get_string(s, name, valp));
}
int
@@ -1132,7 +849,7 @@ nng_strerror(int num)
}
static int
-nng_pipe_getx(nng_pipe p, const char *name, void *val, size_t *szp, nni_type t)
+nni_pipe_getx(nng_pipe p, const char *name, void *val, size_t *szp, nni_type t)
{
int rv;
nni_pipe *pipe;
@@ -1148,67 +865,7 @@ nng_pipe_getx(nng_pipe p, const char *name, void *val, size_t *szp, nni_type t)
return (rv);
}
-int
-nng_pipe_getopt(nng_pipe p, const char *name, void *val, size_t *szp)
-{
- return (nng_pipe_getx(p, name, val, szp, NNI_TYPE_OPAQUE));
-}
-
-int
-nng_pipe_getopt_bool(nng_pipe p, const char *name, bool *valp)
-{
- size_t sz = sizeof(*valp);
- return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_BOOL));
-}
-
-int
-nng_pipe_getopt_int(nng_pipe p, const char *name, int *valp)
-{
- size_t sz = sizeof(*valp);
- return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_INT32));
-}
-
-int
-nng_pipe_getopt_size(nng_pipe p, const char *name, size_t *valp)
-{
- size_t sz = sizeof(*valp);
- return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_SIZE));
-}
-
-int
-nng_pipe_getopt_uint64(nng_pipe p, const char *name, uint64_t *valp)
-{
- size_t sz = sizeof(*valp);
- return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_UINT64));
-}
-
-int
-nng_pipe_getopt_ms(nng_pipe p, const char *name, nng_duration *valp)
-{
- size_t sz = sizeof(*valp);
- return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_DURATION));
-}
-
-int
-nng_pipe_getopt_ptr(nng_pipe p, const char *name, void **valp)
-{
- size_t sz = sizeof(*valp);
- return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_POINTER));
-}
-
-int
-nng_pipe_getopt_sockaddr(nng_pipe p, const char *name, nng_sockaddr *sap)
-{
- size_t sz = sizeof(*sap);
- return (nng_pipe_getx(p, name, sap, &sz, NNI_TYPE_SOCKADDR));
-}
-
-int
-nng_pipe_getopt_string(nng_pipe p, const char *name, char **valp)
-{
- size_t sz = sizeof(*valp);
- return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_STRING));
-}
+NNI_LEGACY_DEFGETALL(pipe)
nng_socket
nng_pipe_socket(nng_pipe p)
@@ -1267,6 +924,16 @@ nng_pipe_id(nng_pipe p)
return (((int) p.id > 0) ? (int) p.id : -1);
}
+NNI_DEFSETALL(ctx)
+NNI_DEFGETALL(ctx)
+NNI_DEFSETALL(dialer)
+NNI_DEFGETALL(dialer)
+NNI_DEFSETALL(listener)
+NNI_DEFGETALL(listener)
+NNI_DEFSETALL(socket)
+NNI_DEFGETALL(socket)
+NNI_DEFGETALL(pipe)
+
// Message handling.
int
nng_msg_alloc(nng_msg **msgp, size_t size)
diff --git a/src/platform/windows/win_pipe.c b/src/platform/windows/win_pipe.c
index c1690991..53ed4171 100644
--- a/src/platform/windows/win_pipe.c
+++ b/src/platform/windows/win_pipe.c
@@ -77,7 +77,7 @@ nni_plat_pipe_open(int *wfdp, int *rfdp)
}
// Now we have to do the accept dance. We don't care about the
- // peer adddress, since know it.
+ // peer address, since know it.
wfd = accept(afd, NULL, 0);
if (wfd == INVALID_SOCKET) {
goto fail;