aboutsummaryrefslogtreecommitdiff
path: root/docs/man/nng_options.5.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'docs/man/nng_options.5.adoc')
-rw-r--r--docs/man/nng_options.5.adoc311
1 files changed, 311 insertions, 0 deletions
diff --git a/docs/man/nng_options.5.adoc b/docs/man/nng_options.5.adoc
new file mode 100644
index 00000000..f07194d1
--- /dev/null
+++ b/docs/man/nng_options.5.adoc
@@ -0,0 +1,311 @@
+= nng_options(5)
+//
+// 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_options - socket, dialer, listener, and pipe options
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+
+#define NNG_OPT_SOCKNAME "socket-name"
+#define NNG_OPT_RAW "raw"
+#define NNG_OPT_LINGER "linger"
+#define NNG_OPT_RECVBUF "recv-buffer"
+#define NNG_OPT_SENDBUF "send-buffer"
+#define NNG_OPT_RECVFD "recv-fd"
+#define NNG_OPT_SENDFD "send-fd"
+#define NNG_OPT_RECVTIMEO "recv-timeout"
+#define NNG_OPT_SENDTIMEO "send-timeout"
+#define NNG_OPT_LOCADDR "local-address"
+#define NNG_OPT_REMADDR "remote-address"
+#define NNG_OPT_URL "url"
+#define NNG_OPT_MAXTTL "ttl-max"
+#define NNG_OPT_RECVMAXSZ "recv-size-max"
+#define NNG_OPT_RECONNMINT "reconnect-time-min"
+#define NNG_OPT_RECONNMAXT "reconnect-time-max"
+----
+
+== DESCRIPTION
+
+This page documents the various standard options that can be set or
+retrieved on objects in the _nng_ library.
+
+Sockets (<<nng_socket.5#,`nng_socket`>> objects) use the functions
+<<nng_getopt.3#,`nng_getopt()`>>
+and <<nng_setopt.3#,`nng_setopt()`>> to set and retrieve option values.
+
+Dialers (<<nng_dialer.5#,`nng_dialer`>> objects) use the functions
+<<nng_dialer_getopt.3#,`nng_dialer_getopt()`>> and
+<<nng_dialer_setopt.3#,`nng_dialer_setopt()`>> to set and retrieve option
+values.
+
+Listeners (<<nng_listener.5#,`nng_listener`>> objects) use the functions
+<<nng_listener_getopt.3#,`nng_listener_getopt()`>>
+and <<nng_listener_setopt.3#,`nng_listener_setopt()`>> to set and
+retrieve option values.
+
+Pipes (<<nng_pipe.5#,`nng_pipe`>> objects) can only retrieve option values using
+the <<nng_pipe_getopt.3#,`nng_pipe_getopt()`>> function.
+
+In addition to the options listed here, transports and protocols will generally
+have some of their own options, which will be documented with the transport
+or protocol.
+
+=== Options
+
+In the following list of options, the name of the option is supplied,
+along with the data type of the underlying value.
+Some options are only meaningful or supported in certain contexts; for
+example there is no single meaningful address for a socket, since sockets
+can have multiple dialers and endpoints associated with them.
+An attempt has been made to include details about such restrictions in the
+description of the option.
+
+[[NNG_OPT_LINGER]]
+((`NNG_OPT_LINGER`))::
+(((lingering)))
+(`<<nng_duration.5#,nng_duration>>`)
+This is the linger time of the socket in milliseconds.
+When this value is non-zero, then the system will
+attempt to defer closing until it has undelivered data, or until the specified
+timeout has expired.
+
+NOTE: Not all transports support lingering, and
+so closing a socket or exiting the application can still result in the loss
+of undelivered messages.
+
+[[NNG_OPT_LOCADDR]]
+((`NNG_OPT_LOCADDR`))::
+(`<<nng_sockaddr.5#,nng_sockaddr>>`)
+This read-only option may be used on listeners, dialers and connected pipes, and
+represents the local address used for communication.
+Not all transports support this option, and some transports may support it
+listeners but not dialers.
+
+[[NNG_OPT_RAW]]
+((`NNG_OPT_RAW`))::
+(((raw mode)))
+(((cooked mode)))
+(`bool`)
+This option determines whether the socket is in "`raw`" mode.
+If `true`, the socket is in "`raw`" mode, and if `false` the socket is
+in "`cooked`" mode.
+Raw mode sockets generally do not have any protocol-specific semantics applied
+to them; instead the application is expected to perform such semantics itself.
+(For example, in "`cooked`" mode a <<nng_rep.7#,_rep_>> socket would
+automatically copy message headers from a received message to the corresponding
+reply, whereas in "`raw`" mode this is not done.)
+
+[[NNG_OPT_RECONNMINT]]
+((`NNG_OPT_RECONNMINT`))::
+(((reconnect time, minimum)))
+(`<<nng_duration.5#,nng_duration>>`)
+This is the minimum amount of time (milliseconds) to wait before attempting
+to establish a connection after a previous attempt has failed.
+This can be set on a socket, but it can also be overridden on an individual
+dialer.
+The option is irrelevant for listeners.
+
+[[NNG_OPT_RECONNMAXT]]
+((`NNG_OPT_RECONNMAXT`))::
+(((`NNG_OPT_RECONNMAXT`)))
+(((reconnect time, maximum)))
+(`<<nng_duration.5#,nng_duration>>`)
+This is the maximum amount of time
+(milliseconds) to wait before attempting to establish a connection after
+a previous attempt has failed.
+If this is non-zero, then the time between successive connection attempts
+will start at the value of `NNG_OPT_RECONNMINT`,
+and grow exponentially, until it reaches this value.
+If this value is zero, then no exponential
+backoff between connection attempts is done, and each attempt will wait
+the time specified by `NNG_OPT_RECONNMINT`.
+This can be set on a socket, but it can also be overridden on an individual
+dialer.
+The option is irrelevant for listeners.
+
+[[NNG_OPT_RECVBUF]]
+((`NNG_OPT_RECVBUF`))::
+(((buffer, receive)))
+(((receive, buffer)))
+(`int`)
+This is the depth of the socket's receive buffer as a number of messages.
+Messages received by a transport may be buffered until the application
+has accepted them for delivery.
+
+[[NNG_OPT_RECVFD]]
+((`NNG_OPT_RECVFD`))::
+(((poll)))
+(((select)))
+(((receive, polling)))
+(`int`)
+This read-only option is used to obtain an integer file descriptor suitable
+for use with
+http://pubs.opengroup.org/onlinepubs/7908799/xsh/poll.html[`poll()`],
+http://pubs.opengroup.org/onlinepubs/7908799/xsh/select.html[`select()`],
+(or on Windows systems
+https://msdn.microsoft.com/en-us/library/windows/desktop/ms741669(v=vs.85).aspx[`WSAPoll()`])
+and similar functions.
+This descriptor will be *readable* when a message is available for receiving
+on the socket.
+When no message is ready for receiving, then this file descriptor will *not*
+be readable.
+
+IMPORTANT: Appplications should never attempt to read or write to the
+returned file descriptor.
+Furthermore, applications should not attempt to use the actual socket (of
+type <<nng_socket.5#,`nng_socket`>>) with polling functions,
+since it is merely an internal
+identifier and will not necessarily referency any operting system object or
+handle.
+
+TIP: While this option may help applications integrate into existing polling
+loops, it is more efficient, and often easier, to use the asynchronous I/O
+objects instead. See <<nng_aio_alloc.3#,`nng_aio_alloc()`>>.
+
+[[NNG_OPT_RECVMAXSZ]]
+((`NNG_OPT_RECVMAXSZ`))::
+(((receive, maximum size)))
+(`size_t`)
+This is the maximum message size that the will be accepted from a remote peer.
+If a peer attempts to send a message larger than this, then the message
+will be discarded.
+If the value of this is zero, then no limit on message sizes is enforced.
+This option exists to prevent certain kinds of denial-of-service attacks,
+where a malicious agent can claim to want to send an extraordinarily
+large message, without sending any data.
+This option can be set for the socket, but may be overridden for on a
+per-dialer or per-listener basis.
+
+NOTE: Some transports may have further message size restrictions!
+
+[[NNG_OPT_RECVTIMEO]]
+((`NNG_OPT_RECVTIMEO`))::
+(((receive, timeout)))
+(((timeout, receive)))
+(`<<nng_duration.5#,nng_duration>>`)
+This is the socket receive timeout in milliseconds.
+When no message is available for receiving at the socket for this period of
+time, receive operations will fail with a return value of `NNG_ETIMEDOUT`.
+
+[[NNG_OPT_REMADDR]]
+((`NNG_OPT_REMADDR`))::
+(`<<nng_sockaddr.5#,nng_sockaddr>>`)
+This read-only option may be used on dialers and connected pipes, and
+represents the address of a remote peer.
+Not all transports support this option.
+
+[[NNG_OPT_SENDBUF]]
+((`NNG_OPT_SENDBUF`))::
+(((send, buffer)))
+(((buffer, send)))
+(`int`)
+This is the depth of the socket send buffer as a number of messages.
+Messages sent by an application may be buffered by the socket until a
+transport is ready to accept them for delivery.
+This value must be an integer between 0 and 8192, inclusive.
+
+NOTE: Not all protocols support buffering sent messages;
+generally multicast protocols like <<nng_pub.7#,_pub_>> will
+simply discard messages when they cannot be delivered immediately.
+
+[[NNG_OPT_SENDFD]]
+((`NNG_OPT_SENDFD`))::
+(((poll)))
+(((select)))
+(((send, polling)))
+(`int`)
+This read-only option is used to obtain an integer file descriptor suitable
+for use with
+http://pubs.opengroup.org/onlinepubs/7908799/xsh/poll.html[`poll()`],
+http://pubs.opengroup.org/onlinepubs/7908799/xsh/select.html[`select()`],
+(or on Windows systems
+https://msdn.microsoft.com/en-us/library/windows/desktop/ms741669(v=vs.85).aspx[`WSAPoll()`])
+and similar functions.
+This descriptor will be *readable* when the socket is able to accept a
+message for sending without blocking.
+When the socket is no longer able to accept such messages without blocking,
+the descriptor will *not* be readable.
+
+IMPORTANT: Appplications should never attempt to read or write to the
+returned file descriptor.
+Furthermore, applications should not attempt to use the actual socket (of
+type <<nng_socket.5#,`nng_socket`>>) with polling functions,
+since it is merely an internal
+identifier and will not necessarily referency any operting system object or
+handle.
+
+TIP: While this option may help applications integrate into existing polling
+loops, it is more efficient, and often easier, to use the asynchronous I/O
+objects instead. See <<nng_aio_alloc.3#,`nng_aio_alloc`()>>.
+
+[[NNG_OPT_SENDTIMEO]]
+((`NNG_OPT_SENDTIMEO`))::
+(((send, timeout)))
+(((timeout, send)))
+(`<<nng_duration.5#,nng_duration>>`)
+This is the socket send timeout in milliseconds.
+When a message cannot be queued for delivery by the socket for this period of
+time (such as if send buffers are full), the operation will fail with a
+return value of `NNG_ETIMEDOUT`.
+
+[[NNG_OPT_SOCKNAME]]
+((`NNG_OPT_SOCKNAME`))::
+(((name, socket)))
+(string)
+This the socket name.
+By default this is a string corresponding to the value of the socket.
+The string must fit within 64-bytes, including the terminating
+`NUL` byte, but it can be changed for other application uses.
+
+[[NNG_OPT_MAXTTL]]
+((`NNG_OPT_MAXTTL`))::
+(`int`)
+(((time-to-live)))
+This is the maximum number of "`hops`" a message may traverse (see
+<<nng_device.3#,`nng_device()`>>).
+The intention here is to prevent ((forwarding loops)) in device chains.
+When this is supported, it can have a value between 1 and 255, inclusive.
+
+NOTE: Not all protocols support this option.
+Those that do generally have a default value of 8.
+
+TIP: Each node along a forwarding path may have it's own value for the
+maximum time-to-live, and performs its own checks before forwarding a message.
+Therefore it is helpful if all nodes in the topology use the same value for
+this option.
+
+[[NNG_OPT_URL]]
+((`NNG_OPT_URL`))::
+(((URI)))
+(((URL)))
+(string)
+This read-only option is used to obtain the URL with which a listener
+or dialer was configured.
+Accordingly it can only be used with dialers, listeners, and pipes.
+
+NOTE: Some transports will canonify URLs before returning them to the
+application.
+
+== SEE ALSO
+
+<<nng_dialer_getopt.3#,nng_dialer_getopt(3)>>,
+<<nng_dialer_setopt.3#,nng_dialer_setopt(3)>>,
+<<nng_getopt.3#,nng_getopt(3)>>,
+<<nng_listener_getopt.3#,nng_listener_getopt(3)>>,
+<<nng_listener_setopt.3#,nng_listener_setopt(3)>>,
+<<nng_pipe_getopt.3#,nng_pipe_getopt(3)>>,
+<<nng_setopt.3#,nng_setopt(3)>>,
+<<nng.7#,nng(7)>>