nn_setsockopt(3)
================

NAME
----
nn_setsockopt - set a socket option


SYNOPSIS
--------
*#include <nanomsg/nn.h>*

*int nn_setsockopt (int 's', int 'level', int 'option', const void '*optval', size_t 'optvallen');*


DESCRIPTION
-----------
Sets the value of the 'option'. The 'level' argument specifies the protocol
level at which the option resides. For generic socket-level options use
_NN_SOL_SOCKET_ level. For socket-type-specific options use socket type
for 'level' argument (e.g. _NN_SUB_). For transport-specific options use ID of
the transport as the 'level' argument (e.g. _NN_TCP_).

The new value is pointed to by 'optval' argument. Size of the option is
specified by the 'optvallen' argument.

_<nanomsg/nn.h>_ header defines generic socket-level options
(_NN_SOL_SOCKET_ level). The options are as follows:

*NN_LINGER*::
    Specifies how long should the socket try to send pending outbound messages
    after _nn_close()_ have been called, in milliseconds. Negative value means
    infinite linger. The type of the option is int. Default value
    is 1000 (1 second).
*NN_SNDBUF*::
    Size of the send buffer, in bytes. To prevent blocking for messages larger
    than the buffer, exactly one message may be buffered in addition to the data
    in the send buffer. The type of this option is int. Default value is 128kB.
*NN_RCVBUF*::
    Size of the receive buffer, in bytes. To prevent blocking for messages
    larger than the buffer, exactly one message may be buffered in addition
    to the data in the receive buffer. The type of this option is int. Default
    value is 128kB.
*NN_SNDTIMEO*::
    The timeout for send operation on the socket, in milliseconds. If message
    cannot be sent within the specified timeout, EAGAIN error is returned.
    Negative value means infinite timeout. The type of the option is int.
    Default value is -1.
*NN_RCVTIMEO*::
    The timeout for recv operation on the socket, in milliseconds. If message
    cannot be received within the specified timeout, EAGAIN error is returned.
    Negative value means infinite timeout. The type of the option is int.
    Default value is -1.
*NN_RECONNECT_IVL*::
    For connection-based transports such as TCP, this option specifies how
    long to wait, in milliseconds, when connection is broken before trying
    to re-establish it. Note that actual reconnect interval may be randomised
    to some extent to prevent severe reconnection storms. The type of the option
    is int. Default value is 100 (0.1 second).
*NN_RECONNECT_IVL_MAX*::
    This option is to be used only in addition to _NN_RECONNECT_IVL_ option.
    It specifies maximum reconnection interval. On each reconnect attempt,
    the previous interval is doubled until _NN_RECONNECT_IVL_MAX_ is reached.
    Value of zero means that no exponential backoff is performed and reconnect
    interval is based only on _NN_RECONNECT_IVL_. If _NN_RECONNECT_IVL_MAX_ is
    less than _NN_RECONNECT_IVL_, it is ignored. The type of the option is int.
    Default value is 0.
*NN_SNDPRIO*::
    Sets outbound priority for endpoints subsequently added to the socket. This
    option has no effect on socket types that send messages to all the peers.
    However, if the socket type sends each message to a single peer
    (or a limited set of peers), peers with high priority take precedence
    over peers with low priority. The type of the option is int. Highest
    priority is 1, lowest priority is 16. Default value is 8.
*NN_IPV4ONLY*::
    If set to 1, only IPv4 addresses are used. If set to 0, both IPv4 and IPv6
    addresses are used. Default value is 1.


RETURN VALUE
------------
If the function succeeds zero is returned. Otherwise, negative number is
returned and 'errno' is set to to one of the values defined below.


ERRORS
------
*EBADF*::
The provided socket is invalid.
*ENOPROTOOPT*::
The option is unknown at the level indicated.
*EINVAL*::
The specified option value is invalid.
*ETERM*::
The library is terminating.

EXAMPLE
-------

----
int linger = 1000;
nn_setsockopt (s, NN_SOL_SOCKET, NN_LINGER, &linger, sizeof (linger));
nn_setsockopt (s, NN_SUB, NN_SUB_SUBSCRIBE, "ABC", 3);
----


SEE ALSO
--------
linknanomsg:nn_socket[3]
linknanomsg:nn_getsockopt[3]
linknanomsg:nanomsg[7]

AUTHORS
-------
Martin Sustrik <sustrik@250bpm.com>

