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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
nng_ipc(7)
==========
:doctype: manpage
:manmanual: nng
:mansource: nng
:icons: font
:source-highlighter: pygments
:copyright: Copyright 2017 Garrett D'Amore <garrett@damore.org> \
Copyright 2017 Capitar IT Group BV <info@capitar.com> \
This software 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_ipc - IPC transport for nng
SYNOPSIS
--------
[source,c]
----------
#include <nng/transport/ipc/ipc.h>
int nng_ipc_register(void);
----------
DESCRIPTION
-----------
The _nng_ipc_ transport provides communication support between
_nng_ sockets within different processes on the same host. For POSIX
platforms, this is implemented using UNIX domain sockets. For Windows,
this is implemented using Windows Named Pipes. Other platforms may
have different implementation strategies.
// We need to insert a reference to the nanomsg RFC.
Registration
~~~~~~~~~~~~
The _ipc_ transport is generally built-in to the _nng_ core, so
no extra steps to use it should be necessary.
URI Format
~~~~~~~~~~
This transport uses URIs using the scheme `ipc://`, followed by
a path name in the file system where the socket or named pipe
should be created.
TIP: On Windows, all names are prefixed by `\.\pipe\` and do not
occupy the normal file system. On POSIX platforms, the path is
taken literally, and is relative to the current directory, unless
an extra leading `/` is provided. For example, `ipc://myname` refers
to the name `myname` in the current directory, whereas `ipc:///tmp/myname`
refers to `myname` located in `/tmp`.
The entire URI must be less than `NNG_MAXADDRLEN` bytes long.
Socket Address
~~~~~~~~~~~~~~
When using an `nng_sockaddr` structure, the actual structure is of type
`nng_sockaddr_ipc`. This is a `struct` type with the following definition:
[source,c]
--------
#define NNG_AF_IPC 2 <1>
#define NNG_MAXADDRLEN 128
typedef struct {
// ... <2>
uint16_t sa_family; // must be NNG_AF_IPC
char sa_path[NNG_MAXADDRLEN]; // arbitrary "path"
// ...
} nng_sockaddr_ipc;
--------
<1> The values of these macros may change, so applications
should avoid depending upon their values and instead use them symbolically.
<2> Other members may be present, but only those listed here
are suitable for application use.
The `sa_family` member will have the value `NNG_AF_IPC`.
The `sa_path` member is an ASCIIZ string, and may contain any legal
path name (platform-dependent), terminated by a `NUL` byte.
Transport Options
~~~~~~~~~~~~~~~~~
The _ipc_ transport has no special
options.footnote:[Options for security attributes and credentials are planned.]
SEE ALSO
--------
<<nng.adoc#,nng(7)>>
COPYRIGHT
---------
Copyright 2017 mailto:garrett@damore.org[Garrett D'Amore] +
Copyright 2017 mailto:info@capitar.com[Capitar IT Group BV]
This document is supplied under the terms of the
https://opensource.org/licenses/LICENSE.txt[MIT License].
|