= nng_ipc(7)
:copyright: Copyright 2018 mailto:info@staysail.tech[Staysail Systems, Inc.] + \
            Copyright 2018 mailto:info@capitar.com[Capitar IT Group BV] + \
            {blank} + \
            This document is supplied under the terms of the \
            https://opensource.org/licenses/MIT[MIT License].

== 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 an absolute 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 root directory.

=== 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#,nng(7)>>

== COPYRIGHT

{copyright}
