nn_get_statistic(3)
===================

NAME
----
nn_get_statistic - retrieve statistics from nanomsg socket


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

*uint64_t *nn_get_statistic (int 's', int 'statistic');*


DESCRIPTION
-----------
Retrieves the value of a statistic from the socket.

CAUTION: While this API is stable, these statistics are intended for
human consumption, to facilitate observability and debugging.
The actual statistics themselves as well as their meanings are unstable,
and subject to change without notice.
Programs should not depend on the presence or values of any particular
statistic.

The following statistics are maintained by the nanomsg core framework;
others may be present. As those are undocumented, no interpretration should
be made from them. Not all statistics are relevant to all transports.
For example, the <<nn_inproc.7.txt#,nn_inproc(7)>> transport does not
maintain any of the connection related statistics.


*NN_STAT_ESTABLISHED_CONNECTIONS*::
    The number of connections successfully established that were initiated
    from this socket.
*NN_STAT_ACCEPTED_CONNECTIONS*::
    The number of connections successfully established that were accepted
    by this socket.
*NN_STAT_DROPPED_CONNECTIONS*::
    The number of established connections that were dropped by this socket.
*NN_STAT_BROKEN_CONNECTIONS*::
    The number of established connections that were closed by this socket,
    typically due to protocol errors.
*NN_STAT_CONNECT_ERRORS*::
    The number of errors encountered by this socket trying to connect to
    a remote peer.
*NN_STAT_BIND_ERRORS*::
    The number of errors encountered by this socket trying to bind to
    a local address.
*NN_STAT_ACCEPT_ERRORS*::
    The number of errors encountered by this socket trying to accept a
    a connection from a remote peer.
*NN_STAT_CURRENT_CONNECTIONS*::
    The number of connections currently estabalished to this socket.
*NN_STAT_MESSAGES_SENT*::
    The number messages sent by this socket.
*NN_STAT_MESSAGES_RECEIVED*::
    The number messages received by this socket.
*NN_STAT_BYTES_SENT*::
    The number of bytes sent by this socket.
*NN_STAT_BYTES_RECEIVED*::
    The number of bytes received by this socket.


RETURN VALUE
------------
On success, the value of the statistic is returned, otherwise (uint64_t)-1
is returned.


ERRORS
------
*EINVAL*::
The statistic is invalid or unsupported.
*EBADF*::
The provided socket is invalid.
*ETERM*::
The library is terminating.


EXAMPLE
-------

----
val = nn_get_statistic (s, NN_STAT_SENT_MESSAGES);
if (val == 0)
    printf ("No messages have been sent yet.\n");
----

SEE ALSO
--------
<<nn_errno.3.txt#,nn_errno(3)>>
<<nn_symbol.3.txt#,nn_symbol(3)>>
<<nanomsg.7.txt#,nanomsg(7)>>


AUTHORS
-------
link:mailto:garrett@damore.org[Garrett D'Amore]

