libnng − nanomsg next generation library
cc [flags] files −lnng [libraries]
NNG provides a common messaging framework intended to solve common communication problems in distributed applications.
It provides a C language API.
The following common functions exist in libnng.
The following functions operate on sockets.
The following functions are used with either listeners, or dialers. Listeners accept incoming connection requests, and dialers make them.
Applications desiring to use the richest part of libnng will want to use the message API, where a message structure is passed between functions. This API provides the most power support for zero−copy.
Messages are divided into a header and body, where the body generally carries user−payload and the header carries protocol specific header information. Most applications will only interact with the body.
Tip
Few applications will need these functions, as message headers are only used to carry protocol−specific content. However, applications which use raw mode may need to access the header of messages.
Most applications will interact with NNG synchronously; that is that functions such as nng_send will block the calling thread until the operation has completed.
Note
Synchronous operations which send messages may return before the message has actually been received, or even transmitted. Instead, These functions return as soon as the message was successfully queued for delivery.
Asynchronous operations behave differently. These operations are initiated by the calling thread, but control returns immediately to the calling thread. When the operation is subsequently completed (regardless of whether this was successful or not), then a user supplied function is executed.
A context structure, an nng_aio, is allocated and associated with each asynchronous operation. Only a single asynchronous operation may be associated with an nng_aio at any time.
The following functions are used in the asynchronous model:
The following functions are used to construct a socket with a specific protocol:
The following functions are used to register a transport for use. This is no longer necessary, and applications should not call these functions anymore.
The following functions are useful to separate the protocol processing from a socket object, into a separate context. This can allow multiple contexts to be created on a single socket for concurrent applications.
The following function family is used to create forwarders or relayers that route messages from one socket to another.
The following functions provide access to statistics which can be used to observe program behaviors and as an aid in troubleshooting.
Common functionality is supplied for parsing and handling universal resource locators (URLS).
Common functionality for message logging.
These supplemental functions are not intrinsic to building network applications with NNG, but they are made available as a convenience to aid in creating portable applications.
These functions are available for use with byte streams. They are considered low−level, for uses where the higher level functions using Scalability Protocols are inappropriate.
Byte streams, represented by nng_stream objects, correspond to underlying connections such as TCP connections or named pipes. They are created by either nng_stream_dialer or nng_stream_listener objects.
The library may be configured with support for HTTP, and this will be the case if WebSocket support is configured as well. In this case, it is possible to access functionality to support the creation of HTTP (and HTTP/S if TLS support is present) servers and clients.
The following functions are used to work with HTTP requests, responses, and connections.
These functions are intended for use with HTTP client applications.
These functions are intended for use with HTTP server applications.
The following functions are used to manipulate transport layer security (TLS) configuration objects. Most of these functions will not be used even by TLS applications.
Note
These functions will only be present if the library has been built with TLS support.
nng_compat(3compat), nng(7)