zhangmeng
2024-04-22 16935f4aebffdd1b6580b844391a0aa0f4f3012b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
= nng_sockaddr(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 - socket address
 
== SYNOPSIS
 
[source, c]
----
#include <nng/nng.h>
 
typedef union nng_sockaddr {
    uint16_t              s_family;
    nng_sockaddr_ipc      s_ipc;
    nng_sockaddr_inproc   s_inproc;
    nng_sockaddr_in       s_in;
    nng_sockaddr_in6      s_in6;
    nng_sockaddr_zt       s_zt;
    nng_sockaddr_abstract s_abstract;
} nng_sockaddr;
 
enum sockaddr_family {
    NNG_AF_UNSPEC   = 0,
    NNG_AF_INPROC   = 1,
    NNG_AF_IPC      = 2,
    NNG_AF_INET     = 3,
    NNG_AF_INET6    = 4,
    NNG_AF_ZT       = 5,
    NNG_AF_ABSTRACT = 6
};
----
 
== DESCRIPTION
 
(((socket, address)))(((address, socket)))
An `nng_sockaddr` is a structure used for
representing the addresses used by underlying transports, such as TCP/IP
addresses, IPC paths, and so forth.
 
****
The name `sockaddr` is based on its similarity with POSIX `struct sockaddr`,
but in _NNG_, these addresses are more closely affiliated with
instances of xref:nng_pipe.5.adoc[`nng_pipe`]
than of xref:nng_socket.5.adoc[`nng_socket`].
The naming confusion is unfortunate.
****
 
This structure is actually a union, with different members for different
types of addresses.
 
Every member structure has as its first element a `uint16_t` field
containing the ((address family)).
This overlaps the `s_family` member of the union, and indicates which
specific member should be used.
 
The values of `s_family` are as follows:
 
[horizontal]
`NNG_AF_UNSPEC`:: Invalid address, no other valid fields.
`NNG_AF_INPROC`:: Address for intraprocess communication (xref:nng_inproc.7.adoc[nng_inproc(7)]).  The `s_inproc` member is valid.
`NNG_AF_IPC`:: Address for interprocess communication (xref:nng_ipc.7.adoc[nng_ipc(7)]).  The `s_path` member is valid.
`NNG_AF_INET`:: Address for TCP/IP (v4) communication.  The `s_in` member is valid.
`NNG_AF_INET6`:: Address for TCP/IP (v6) communication.  The `s_in6` member is valid.
`NNG_AF_ZT`:: Address for ZeroTier transport (xref:nng_zerotier.7.adoc[nng_zerotier(7)]).  The `s_zt` member is valid.
`NNG_AF_ABSTRACT`:: Address for an abstract UNIX domain socket.  The `s_abstract` member is valid.
 
Please see the manual pages for each individual type for more information.
 
== SEE ALSO
 
[.text-left]
xref:nng_sockaddr_abstract.5.adoc[nng_sockaddr_abstract(5)],
xref:nng_sockaddr_in.5.adoc[nng_sockaddr_in(5)],
xref:nng_sockaddr_in6.5.adoc[nng_sockaddr_in6(5)],
xref:nng_sockaddr_inproc.5.adoc[nng_sockaddr_inproc(5)],
xref:nng_sockaddr_ipc.5.adoc[nng_sockaddr_ipc(5)],
xref:nng_sockaddr_zt.5.adoc[nng_sockaddr_zt(5)],
xref:nng.7.adoc[nng(7)]