diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-03-30 23:07:20 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-03-30 23:07:20 -0700 |
| commit | f73cd76f54b8aead38689e0ea805d5d805dfbe96 (patch) | |
| tree | 0f6643e955770a9e96a8bbd900ca957a73fe1182 | |
| parent | 6f8944a96a5acd509014caae4e57dafbba51e126 (diff) | |
| download | nng-f73cd76f54b8aead38689e0ea805d5d805dfbe96.tar.gz nng-f73cd76f54b8aead38689e0ea805d5d805dfbe96.tar.bz2 nng-f73cd76f54b8aead38689e0ea805d5d805dfbe96.zip | |
Staging work. converted nng_ipc.
| -rw-r--r-- | docs/man/nng_ipc.7.adoc | 126 | ||||
| -rw-r--r-- | docs/reference/book.toml | 16 | ||||
| -rw-r--r-- | docs/reference/src/SUMMARY.md | 1 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_dialer_getopt.3.adoc (renamed from docs/man/nng_dialer_getopt.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_dialer_setopt.3.adoc (renamed from docs/man/nng_dialer_setopt.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_getopt.3.adoc (renamed from docs/man/nng_getopt.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_inproc_register.3.adoc (renamed from docs/man/nng_inproc_register.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_ipc_register.3.adoc (renamed from docs/man/nng_ipc_register.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_listener_getopt.3.adoc (renamed from docs/man/nng_listener_getopt.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_listener_setopt.3.adoc (renamed from docs/man/nng_listener_setopt.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_pipe_getopt.3.adoc (renamed from docs/man/nng_pipe_getopt.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_setopt.3.adoc (renamed from docs/man/nng_setopt.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_tcp_register.3.adoc (renamed from docs/man/nng_tcp_register.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_tls_register.3.adoc (renamed from docs/man/nng_tls_register.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_ws_register.3.adoc (renamed from docs/man/nng_ws_register.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_wss_register.3.adoc (renamed from docs/man/nng_wss_register.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/old/nng_zt_register.3.adoc (renamed from docs/man/nng_zt_register.3.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/refs.md | 14 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_close.3str.adoc (renamed from docs/man/nng_stream_close.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_dialer.5.adoc (renamed from docs/man/nng_stream_dialer.5.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_dialer_alloc.3str.adoc (renamed from docs/man/nng_stream_dialer_alloc.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_dialer_close.3str.adoc (renamed from docs/man/nng_stream_dialer_close.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_dialer_dial.3str.adoc (renamed from docs/man/nng_stream_dialer_dial.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_dialer_free.3str.adoc (renamed from docs/man/nng_stream_dialer_free.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_dialer_get.3str.adoc (renamed from docs/man/nng_stream_dialer_get.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_dialer_set.3str.adoc (renamed from docs/man/nng_stream_dialer_set.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_free.3str.adoc (renamed from docs/man/nng_stream_free.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_get.3str.adoc (renamed from docs/man/nng_stream_get.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener.5.adoc (renamed from docs/man/nng_stream_listener.5.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener_accept.3str.adoc (renamed from docs/man/nng_stream_listener_accept.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener_alloc.3str.adoc (renamed from docs/man/nng_stream_listener_alloc.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener_close.3str.adoc (renamed from docs/man/nng_stream_listener_close.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener_free.3str.adoc (renamed from docs/man/nng_stream_listener_free.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener_get.3str.adoc (renamed from docs/man/nng_stream_listener_get.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener_listen.3str.adoc (renamed from docs/man/nng_stream_listener_listen.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_listener_set.3str.adoc (renamed from docs/man/nng_stream_listener_set.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_recv.3str.adoc (renamed from docs/man/nng_stream_recv.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_send.3str.adoc (renamed from docs/man/nng_stream_send.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/stream/nng_stream_set.3str.adoc (renamed from docs/man/nng_stream_set.3str.adoc) | 0 | ||||
| -rw-r--r-- | docs/reference/src/tran/ipc.md | 95 |
40 files changed, 123 insertions, 129 deletions
diff --git a/docs/man/nng_ipc.7.adoc b/docs/man/nng_ipc.7.adoc deleted file mode 100644 index c085e4d2..00000000 --- a/docs/man/nng_ipc.7.adoc +++ /dev/null @@ -1,126 +0,0 @@ -= nng_ipc(7) -// -// Copyright 2023 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_ipc - IPC transport - -== SYNOPSIS - -[source,c] ----- -#include <nng/transport/ipc/ipc.h> - -int nng_ipc_register(void); ----- - -== DESCRIPTION - -(((IPC)))(((transport, _ipc_))) -The ((_ipc_ transport)) provides communication support between -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 - -This transport is generally built-in to the core, so -no extra steps to use it should be necessary. - -=== URI Formats - -==== Traditional Names - -(((URI, `ipc://`))) -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 -reside in the normal file system. -On POSIX platforms, the path is taken literally, and is relative to -the current directory, unless it begins with `/`, in which case it is -relative to the root directory. - -NOTE: When using relative paths on POSIX systems, the address used and returned -in properties like `NNG_OPT_LOCADDR` and `NNG_OPT_URL` will also be relative. -Consequently, they will only be interpreted the same by processes that have -the same working directory. -To ensure maximum portability and safety, absolute paths are recommended -whenever possible. - -NOTE: If compatibility with legacy _nanomsg_ applications is required, -then path names must not be longer than 122 bytes, including the final -`NUL` byte. -This is because legacy versions of _nanomsg_ cannot express URLs -longer than 128 bytes, including the `ipc://` prefix. - -==== UNIX Aliases - -(((URI, `unix://`))) -The `unix://` scheme is an alias for `ipc://` and can be used inter-changeably, but only -on POSIX systems. - -The purpose of this scheme is to support a future transport making use of `AF_UNIX` -on Windows systems, at which time it will be necessary to discriminate between -the Named Pipes and the `AF_UNIX` based transports. - -==== Abstract Names - -(((URI, `abstract://`))) -On Linux, this transport also can support abstract sockets. -Abstract sockets use a URI-encoded name after the scheme, which allows arbitrary values to be conveyed -in the path, including embedded `NUL` bytes. -For example, the name `"a\0b"` would be represented as `abstract://a%00b`. - -TIP: An empty name may be used with a listener to request "`auto bind`" be used to select a name. -In this case the system will allocate a free name. -The name assigned may be retrieved using `NNG_OPT_LOCADDR`. - -NOTE: _NNG_ cannot represent an abstract socket with the empty name. - -NOTE: Abstract names do not include the leading `NUL` byte used in the low-level socket address. - -Abstract sockets do not have any representation in the file system, and are automatically freed by -the system when no longer in use. -Abstract sockets ignore socket permissions, but it is still possible to determine the credentials -of the peer with `NNG_OPT_PEER_UID`, etc. - -=== Socket Address - -When using an xref:nng_sockaddr.5.adoc[`nng_sockaddr`] structure, -the actual structure is of type xref:nng_sockaddr_ipc.5.adoc[`nng_sockaddr_ipc`], -except for abstract sockets, which use xref:nng_sockaddr_abstract.5.adoc[`nng_sockaddr_abstract`]. - -=== Transport Options - -The following transport options are supported by this transport, -where supported by the underlying platform. - -* xref:nng_ipc_options.5.adoc#NNG_OPT_IPC_PERMISSIONS[`NNG_OPT_IPC_PERMISSIONS`] -* xref:nng_ipc_options.5.adoc#NNG_OPT_IPC_SECURITY_DESCRIPTOR[`NNG_OPT_IPC_SECURITY_DESCRIPTOR`] -* xref:nng_options.5.adoc#NNG_OPT_LOCADDR[`NNG_OPT_LOCADDR`] -* xref:nng_options.5.adoc#NNG_OPT_REMADDR[`NNG_OPT_REMADDR`] -* xref:nng_options.5.adoc#NNG_OPT_PEER_GID[`NNG_OPT_PEER_GID`] -* xref:nng_options.5.adoc#NNG_OPT_PEER_PID[`NNG_OPT_PEER_PID`] -* xref:nng_options.5.adoc#NNG_OPT_PEER_UID[`NNG_OPT_PEER_UID`] -* xref:nng_options.5.adoc#NNG_OPT_PEER_ZONEID[`NNG_OPT_PEER_ZONEID`] -* xref:nng_options.5.adoc#NNG_OPT_URL[`NNG_OPT_URL`] - -== SEE ALSO - -[.text-left] -xref:nng_sockaddr.5.adoc[nng_sockaddr(5)], -xref:nng_ipc_options.5.adoc[nng_ipc_options(5)], -xref:nng_options.5.adoc[nng_options(5)], -xref:nng.7.adoc[nng(7)] diff --git a/docs/reference/book.toml b/docs/reference/book.toml index aeca51c3..d74117ea 100644 --- a/docs/reference/book.toml +++ b/docs/reference/book.toml @@ -15,6 +15,8 @@ fold.level = 1 [preprocessor.indexing.see_instead] # "*PUSH* (protocol)" = "protocol, *PUSH*" +"URI" = "URI" +"option" = "Options" [preprocessor.indexing.nest_under] "body" = "message" @@ -38,11 +40,25 @@ fold.level = 1 "*ws*" = "transport" "*wss*" = "transport" +"`abstract://`" = "URI" "`inproc://`" = "URI" "`ipc://`" = "URI" "`tls+tcp://`" = "URI" "`tcp://`" = "URI" +"`unix://`" = "URI" "`ws://`" = "URI" "`wss://`" = "URI" +"`NNG_OPT_LOCADDR`" = "option" +"`NNG_OPT_REMADDR`" = "option" +"`NNG_OPT_PEER_GID`" = "option" +"`NNG_OPT_PEER_PID`" = "option" +"`NNG_OPT_PEER_UID`" = "option" +"`NNG_OPT_SUB_PREFNEW`" = "option" +"`NNG_OPT_SUB_SUBSCRIBE`" = "option" +"`NNG_OPT_SUB_UNSUBSCRIBE`" = "option" +"`NNG_OPT_SURVEYOR_SURVEYTIME`" = "option" +"`NNG_OPT_REQ_RESENDTIME`" = "option" +"`NNG_OPT_REQ_RESENDTICK`" = "option" + [preprocessor.alerts] diff --git a/docs/reference/src/SUMMARY.md b/docs/reference/src/SUMMARY.md index 82187252..e81fec99 100644 --- a/docs/reference/src/SUMMARY.md +++ b/docs/reference/src/SUMMARY.md @@ -19,6 +19,7 @@ - [Transports](tran/index.md) + - [IPC](tran/ipc.md) - [INPROC](tran/inproc.md) - [TCP](tran/tcp.md) diff --git a/docs/man/nng_dialer_getopt.3.adoc b/docs/reference/src/old/nng_dialer_getopt.3.adoc index a4083819..a4083819 100644 --- a/docs/man/nng_dialer_getopt.3.adoc +++ b/docs/reference/src/old/nng_dialer_getopt.3.adoc diff --git a/docs/man/nng_dialer_setopt.3.adoc b/docs/reference/src/old/nng_dialer_setopt.3.adoc index 3aaff1eb..3aaff1eb 100644 --- a/docs/man/nng_dialer_setopt.3.adoc +++ b/docs/reference/src/old/nng_dialer_setopt.3.adoc diff --git a/docs/man/nng_getopt.3.adoc b/docs/reference/src/old/nng_getopt.3.adoc index 364d8f71..364d8f71 100644 --- a/docs/man/nng_getopt.3.adoc +++ b/docs/reference/src/old/nng_getopt.3.adoc diff --git a/docs/man/nng_inproc_register.3.adoc b/docs/reference/src/old/nng_inproc_register.3.adoc index 8379a4e8..8379a4e8 100644 --- a/docs/man/nng_inproc_register.3.adoc +++ b/docs/reference/src/old/nng_inproc_register.3.adoc diff --git a/docs/man/nng_ipc_register.3.adoc b/docs/reference/src/old/nng_ipc_register.3.adoc index 64da4b00..64da4b00 100644 --- a/docs/man/nng_ipc_register.3.adoc +++ b/docs/reference/src/old/nng_ipc_register.3.adoc diff --git a/docs/man/nng_listener_getopt.3.adoc b/docs/reference/src/old/nng_listener_getopt.3.adoc index 828f440d..828f440d 100644 --- a/docs/man/nng_listener_getopt.3.adoc +++ b/docs/reference/src/old/nng_listener_getopt.3.adoc diff --git a/docs/man/nng_listener_setopt.3.adoc b/docs/reference/src/old/nng_listener_setopt.3.adoc index 25411adc..25411adc 100644 --- a/docs/man/nng_listener_setopt.3.adoc +++ b/docs/reference/src/old/nng_listener_setopt.3.adoc diff --git a/docs/man/nng_pipe_getopt.3.adoc b/docs/reference/src/old/nng_pipe_getopt.3.adoc index 648abbcc..648abbcc 100644 --- a/docs/man/nng_pipe_getopt.3.adoc +++ b/docs/reference/src/old/nng_pipe_getopt.3.adoc diff --git a/docs/man/nng_setopt.3.adoc b/docs/reference/src/old/nng_setopt.3.adoc index 6c21cf95..6c21cf95 100644 --- a/docs/man/nng_setopt.3.adoc +++ b/docs/reference/src/old/nng_setopt.3.adoc diff --git a/docs/man/nng_tcp_register.3.adoc b/docs/reference/src/old/nng_tcp_register.3.adoc index 3da671a9..3da671a9 100644 --- a/docs/man/nng_tcp_register.3.adoc +++ b/docs/reference/src/old/nng_tcp_register.3.adoc diff --git a/docs/man/nng_tls_register.3.adoc b/docs/reference/src/old/nng_tls_register.3.adoc index bfe27e05..bfe27e05 100644 --- a/docs/man/nng_tls_register.3.adoc +++ b/docs/reference/src/old/nng_tls_register.3.adoc diff --git a/docs/man/nng_ws_register.3.adoc b/docs/reference/src/old/nng_ws_register.3.adoc index 7a9cc1f3..7a9cc1f3 100644 --- a/docs/man/nng_ws_register.3.adoc +++ b/docs/reference/src/old/nng_ws_register.3.adoc diff --git a/docs/man/nng_wss_register.3.adoc b/docs/reference/src/old/nng_wss_register.3.adoc index 856fe1c0..856fe1c0 100644 --- a/docs/man/nng_wss_register.3.adoc +++ b/docs/reference/src/old/nng_wss_register.3.adoc diff --git a/docs/man/nng_zt_register.3.adoc b/docs/reference/src/old/nng_zt_register.3.adoc index 9c4a4ac4..9c4a4ac4 100644 --- a/docs/man/nng_zt_register.3.adoc +++ b/docs/reference/src/old/nng_zt_register.3.adoc diff --git a/docs/reference/src/refs.md b/docs/reference/src/refs.md index ea27e96e..5d808e0b 100644 --- a/docs/reference/src/refs.md +++ b/docs/reference/src/refs.md @@ -7,9 +7,11 @@ [msg]: ../msg/index.md [pipe]: ../overview/pipe.md [socket]: ../sock/index.md -[sockadddr]: ../overview/sockaddr.md +[sockaddr]: ../overview/sockaddr.md [sockaddr_in]: ../overview/sockaddr_in.md [sockaddr_in6]: ../overview/sockaddr_in6.md +[sockaddr_ipc]: ../overview/sockaddr_ipc.md +[sockaddr_abstract]: ../overview/sockaddr_abstract.md [raw]: ../overview/raw.md [url]: ../overview/url.md [transport]: ../tran/index.md @@ -147,8 +149,14 @@ [NNG_OPT_SENDBUF]: ../opts/nng_opt_sendbuf.md [NNG_OPT_LOCADDR]: ../opts/nng_opt_locaddr.md [NNG_OPT_REMADDR]: ../api/nng_options.md#NNG_OPT_REMADDR -[NNG_OPT_TCP_KEEPALIVE]: ../api/nng_tcp_options.md#NNG_OPT_TCP_KEEPALIVE -[NNG_OPT_TCP_NODELAY]: ../api/nng_tcp_options.md#NNG_OPT_TCP_NODELAY +[NNG_OPT_TCP_KEEPALIVE]: ../opts/tcp_options.md#NNG_OPT_TCP_KEEPALIVE +[NNG_OPT_TCP_NODELAY]: ../opts/tcp_options.md#NNG_OPT_TCP_NODELAY +[NNG_OPT_IPC_SECURITY_DESCRIPTOR]: ../opts/ipc_options.md +[NNG_OPT_IPC_PERMISSIONS]: ../opts/ipc_options.md +[NNG_OPT_PEER_GID]: ../opts/ipc_options.md +[NNG_OPT_PEER_PID]: ../opts/ipc_options.md +[NNG_OPT_PEER_UID]: ../opts/ipc_options.md +[NNG_OPT_PEER_ZONEID]: ../opts/ipc_options.md [NNG_OPT_URL]: ../api/nng_options.md#NNG_OPT_URL <!-- External --> diff --git a/docs/man/nng_stream_close.3str.adoc b/docs/reference/src/stream/nng_stream_close.3str.adoc index 9e7b8d6a..9e7b8d6a 100644 --- a/docs/man/nng_stream_close.3str.adoc +++ b/docs/reference/src/stream/nng_stream_close.3str.adoc diff --git a/docs/man/nng_stream_dialer.5.adoc b/docs/reference/src/stream/nng_stream_dialer.5.adoc index eef23a3d..eef23a3d 100644 --- a/docs/man/nng_stream_dialer.5.adoc +++ b/docs/reference/src/stream/nng_stream_dialer.5.adoc diff --git a/docs/man/nng_stream_dialer_alloc.3str.adoc b/docs/reference/src/stream/nng_stream_dialer_alloc.3str.adoc index 0c2db67c..0c2db67c 100644 --- a/docs/man/nng_stream_dialer_alloc.3str.adoc +++ b/docs/reference/src/stream/nng_stream_dialer_alloc.3str.adoc diff --git a/docs/man/nng_stream_dialer_close.3str.adoc b/docs/reference/src/stream/nng_stream_dialer_close.3str.adoc index 59d9dec0..59d9dec0 100644 --- a/docs/man/nng_stream_dialer_close.3str.adoc +++ b/docs/reference/src/stream/nng_stream_dialer_close.3str.adoc diff --git a/docs/man/nng_stream_dialer_dial.3str.adoc b/docs/reference/src/stream/nng_stream_dialer_dial.3str.adoc index 8dcd4ec2..8dcd4ec2 100644 --- a/docs/man/nng_stream_dialer_dial.3str.adoc +++ b/docs/reference/src/stream/nng_stream_dialer_dial.3str.adoc diff --git a/docs/man/nng_stream_dialer_free.3str.adoc b/docs/reference/src/stream/nng_stream_dialer_free.3str.adoc index 6669ca1e..6669ca1e 100644 --- a/docs/man/nng_stream_dialer_free.3str.adoc +++ b/docs/reference/src/stream/nng_stream_dialer_free.3str.adoc diff --git a/docs/man/nng_stream_dialer_get.3str.adoc b/docs/reference/src/stream/nng_stream_dialer_get.3str.adoc index 4023e56f..4023e56f 100644 --- a/docs/man/nng_stream_dialer_get.3str.adoc +++ b/docs/reference/src/stream/nng_stream_dialer_get.3str.adoc diff --git a/docs/man/nng_stream_dialer_set.3str.adoc b/docs/reference/src/stream/nng_stream_dialer_set.3str.adoc index bd4ac478..bd4ac478 100644 --- a/docs/man/nng_stream_dialer_set.3str.adoc +++ b/docs/reference/src/stream/nng_stream_dialer_set.3str.adoc diff --git a/docs/man/nng_stream_free.3str.adoc b/docs/reference/src/stream/nng_stream_free.3str.adoc index 30679458..30679458 100644 --- a/docs/man/nng_stream_free.3str.adoc +++ b/docs/reference/src/stream/nng_stream_free.3str.adoc diff --git a/docs/man/nng_stream_get.3str.adoc b/docs/reference/src/stream/nng_stream_get.3str.adoc index 606fcc09..606fcc09 100644 --- a/docs/man/nng_stream_get.3str.adoc +++ b/docs/reference/src/stream/nng_stream_get.3str.adoc diff --git a/docs/man/nng_stream_listener.5.adoc b/docs/reference/src/stream/nng_stream_listener.5.adoc index b774a1b9..b774a1b9 100644 --- a/docs/man/nng_stream_listener.5.adoc +++ b/docs/reference/src/stream/nng_stream_listener.5.adoc diff --git a/docs/man/nng_stream_listener_accept.3str.adoc b/docs/reference/src/stream/nng_stream_listener_accept.3str.adoc index f5ffbca5..f5ffbca5 100644 --- a/docs/man/nng_stream_listener_accept.3str.adoc +++ b/docs/reference/src/stream/nng_stream_listener_accept.3str.adoc diff --git a/docs/man/nng_stream_listener_alloc.3str.adoc b/docs/reference/src/stream/nng_stream_listener_alloc.3str.adoc index 966866ba..966866ba 100644 --- a/docs/man/nng_stream_listener_alloc.3str.adoc +++ b/docs/reference/src/stream/nng_stream_listener_alloc.3str.adoc diff --git a/docs/man/nng_stream_listener_close.3str.adoc b/docs/reference/src/stream/nng_stream_listener_close.3str.adoc index a810509e..a810509e 100644 --- a/docs/man/nng_stream_listener_close.3str.adoc +++ b/docs/reference/src/stream/nng_stream_listener_close.3str.adoc diff --git a/docs/man/nng_stream_listener_free.3str.adoc b/docs/reference/src/stream/nng_stream_listener_free.3str.adoc index aecd8895..aecd8895 100644 --- a/docs/man/nng_stream_listener_free.3str.adoc +++ b/docs/reference/src/stream/nng_stream_listener_free.3str.adoc diff --git a/docs/man/nng_stream_listener_get.3str.adoc b/docs/reference/src/stream/nng_stream_listener_get.3str.adoc index 927e36a8..927e36a8 100644 --- a/docs/man/nng_stream_listener_get.3str.adoc +++ b/docs/reference/src/stream/nng_stream_listener_get.3str.adoc diff --git a/docs/man/nng_stream_listener_listen.3str.adoc b/docs/reference/src/stream/nng_stream_listener_listen.3str.adoc index e8473b52..e8473b52 100644 --- a/docs/man/nng_stream_listener_listen.3str.adoc +++ b/docs/reference/src/stream/nng_stream_listener_listen.3str.adoc diff --git a/docs/man/nng_stream_listener_set.3str.adoc b/docs/reference/src/stream/nng_stream_listener_set.3str.adoc index ccabe5ca..ccabe5ca 100644 --- a/docs/man/nng_stream_listener_set.3str.adoc +++ b/docs/reference/src/stream/nng_stream_listener_set.3str.adoc diff --git a/docs/man/nng_stream_recv.3str.adoc b/docs/reference/src/stream/nng_stream_recv.3str.adoc index 148be978..148be978 100644 --- a/docs/man/nng_stream_recv.3str.adoc +++ b/docs/reference/src/stream/nng_stream_recv.3str.adoc diff --git a/docs/man/nng_stream_send.3str.adoc b/docs/reference/src/stream/nng_stream_send.3str.adoc index 5a53e63c..5a53e63c 100644 --- a/docs/man/nng_stream_send.3str.adoc +++ b/docs/reference/src/stream/nng_stream_send.3str.adoc diff --git a/docs/man/nng_stream_set.3str.adoc b/docs/reference/src/stream/nng_stream_set.3str.adoc index e4a82a1a..e4a82a1a 100644 --- a/docs/man/nng_stream_set.3str.adoc +++ b/docs/reference/src/stream/nng_stream_set.3str.adoc diff --git a/docs/reference/src/tran/ipc.md b/docs/reference/src/tran/ipc.md new file mode 100644 index 00000000..b2daa40e --- /dev/null +++ b/docs/reference/src/tran/ipc.md @@ -0,0 +1,95 @@ +# IPC Transport + +## DESCRIPTION + +The {{i:*ipc* transport}}{{hi:*ipc*}} provides communication support between +sockets within different processes on the same host. +For POSIX platforms, this is implemented using {{i:UNIX domain sockets}}. +For Windows, this is implemented using Windows {{i:named pipes}}. +Other platforms may have different implementation strategies. + +### URI Formats + +#### Traditional Names + +This transport uses URIs using the scheme {{i:`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 +> reside in the normal file system. +> On POSIX platforms, the path is taken literally, and is relative to +> the current directory, unless it begins with `/`, in which case it is +> relative to the root directory. + +> [!NOTE] +> When using relative paths on POSIX systems, the address used and returned +> in properties like `NNG_OPT_LOCADDR` and `NNG_OPT_URL` will also be relative. +> Consequently, they will only be interpreted the same by processes that have +> the same working directory. +> To ensure maximum portability and safety, absolute paths are recommended +> whenever possible. + +> [!NOTE] +> If compatibility with legacy _nanomsg_ applications is required, +> then path names must not be longer than 122 bytes, including the final +> `NUL` byte. +> This is because legacy versions of _nanomsg_ cannot express URLs +> longer than 128 bytes, including the `ipc://` prefix. + +#### UNIX Aliases + +The {{i:`unix://`}} scheme is an alias for `ipc://` and can be used inter-changeably, but only on POSIX systems.[^1] + +[^1]: + The purpose of this scheme is to support a future transport making use of {{i:`AF_UNIX`}} + on Windows systems, at which time it will be necessary to discriminate between + the Named Pipes and the `AF_UNIX` based transports. + +#### Abstract Names + +On Linux, this transport also can support {{i:abstract sockets}}. +Abstract sockets use a URI-encoded name after the {{i:`abstract://`}} scheme, which allows arbitrary values to be conveyed +in the path, including embedded `NUL` bytes. +For example, the name `"a\0b"` would be represented as `abstract://a%00b`. + +> [!TIP] +> An empty name may be used with a listener to request "auto bind" be used to select a name. +> In this case the system will allocate a free name. +> The name assigned may be retrieved using [{{i:`NNG_OPT_LOCADDR`}}][NNG_OPT_LOCADDR]. + +Abstract names do not include the leading `NUL` byte used in the low-level socket address. + +Abstract sockets do not have any representation in the file system, and are automatically freed by +the system when no longer in use. + +Abstract sockets ignore socket permissions, but it is still possible to determine the credentials +of the peer with [{{i:`NNG_OPT_PEER_UID`}}][NNG_OPT_PEER_UID], and similar options.[^2] + +[^2]: + This property makes it important that names be chosen randomly to + prevent unauthorized access, or that checks against the peer credentials + are made, or ideally, both. + +### Socket Address + +When using an [`nng_sockaddr`][sockaddr] structure, +the actual structure is of type [`nng_sockaddr_ipc`][sockaddr_ipc], +except for abstract sockets, which use [`nng_sockaddr_abstract`][sockaddr_abstract]. + +### Transport Options + +The following transport options are supported by this transport, +where supported by the underlying platform. + +- [`NNG_OPT_IPC_PERMISSIONS`][NNG_OPT_IPC_PERMISSIONS] +- [`NNG_OPT_IPC_SECURITY_DESCRIPTOR`][NNG_OPT_IPC_SECURITY_DESCRIPTOR] +- [`NNG_OPT_LOCADDR`][NNG_OPT_LOCADDR] +- [`NNG_OPT_REMADDR`][NNG_OPT_REMADDR] +- [`NNG_OPT_PEER_GID`][NNG_OPT_PEER_GID] +- [`NNG_OPT_PEER_PID`][NNG_OPT_PEER_PID] +- [`NNG_OPT_PEER_UID`][NNG_OPT_PEER_UID] +- [`NNG_OPT_PEER_ZONEID`][NNG_OPT_PEER_ZONEID] +- [`NNG_OPT_URL`][NNG_OPT_URL] + +{{#include ../refs.md}} |
