Provided by: libnng-dev_1.10.1-1_amd64 

NAME
nng_ipc - IPC transport
SYNOPSIS
#include <nng/transport/ipc/ipc.h>
int nng_ipc_register(void);
DESCRIPTION
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.
Registration
This transport is generally built-in to the core, so no extra steps to use it should be necessary.
URI Formats
Traditional Names
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
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
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 nng_sockaddr structure, the actual structure is of type nng_sockaddr_ipc, except for
abstract sockets, which use nng_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_SECURITY_DESCRIPTOR
• NNG_OPT_LOCADDR
• NNG_OPT_REMADDR
• NNG_OPT_PEER_GID
• NNG_OPT_PEER_PID
• NNG_OPT_PEER_UID
• NNG_OPT_PEER_ZONEID
• NNG_OPT_URL
SEE ALSO
nng_sockaddr(5), nng_ipc_options(5), nng_options(5), nng(7)
2025-02-02 NNG_IPC(7)