= nng_sockaddr_zt(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_sockaddr_zt - ZeroTier socket address

== SYNOPSIS

[source, c]
----
#include <nng/nng.h>

enum sockaddr_family {
    NNG_AF_ZT = 5,
};

typedef struct {
    uint16_t sa_family;
    uint64_t sa_nwid;
    uint64_t sa_nodeid;
    uint32_t sa_port;
} nng_sockaddr_zt;
----

== DESCRIPTION

(((socket, address, ZeroTier)))
An `nng_sockaddr_zt` is the flavor of `<<nng_sockaddr.5#,nng_sockaddr>>`
used to represent ZeroTier addresses, including the
(((port number, ZeroTier)))port number used by the
<<nng_zerotier.7#,_zt_>> transport.

IMPORTANT: The ZeroTier transport, and the details of this structure,
are still considered experimental, and subject to change.

The following structure members are present:

`sa_family`::
    This field will always have the value ((`NNG_AF_ZT`)).

`sa_nwid`::
    (((network number, ZeroTier)))
    This field holds the ZeroTier network number (or ID).
    This value is in native byte order.

`sa_nodeid`::
    This field holds the ZeroTier node ID.(((node ID, ZeroTier)))
    This value is in native byte order, and only the lower 40 bits
    are significant.
    (ZeroTier node numbers are 40 bits long.)
    A zero value here is used for a wild-card to indicate that the
    caller's own node number be used.

`sa_port`::
    This field holds the "`port number`" used by the
    <<nng_zerotier.7#,_zt_>> transport to distinguish different
    sockets.
    This value in native byte order.(((port number, ZeroTier)))
    A zero value here indicates that a port number should be chosen
    randomly from the ephemeral ports.
    Only the lower 24 bits of the port number are used.

NOTE: ZeroTier port numbers are in *native* byte order, and are larger
than TCP/IP port numbers.
They are also not part of the ZeroTier protocol itself, but defined by
the Scalability Protocols binding for them.

== SEE ALSO

[.text-left]
<<nng_sockaddr.5#,nng_sockaddr(5)>>,
<<nng_zerotier.7#,nng_zerotier(7)>>,
<<nng.7#,nng(7)>>
