nanomsg next generation NNG  
Home GitHub Documentation

This documentation is for version v1.0.1 of nng, but the latest released version is v1.8.0. see the documentation for v1.8.0 for the most up-to-date information.
libnng(3)

SYNOPSIS

cc [flags] files -lnng [libraries]

DESCRIPTION

The nng library provides a common messaging framework intended to solve common communication problems in distributed applications.

It provides a C language API.

Common Functions

The following common functions exist in libnng.

nng_alloc()

allocate memory

nng_free()

free memory

nng_strdup()

duplicate string

nng_strerror()

return an error description

nng_strfree()

free string

nng_version()

report library version

Socket Functions

The following functions operate on sockets.

nng_close()

close socket

nng_dial()

create and start dialer

nng_getopt()

get socket option

nng_listen()

create and start listener

nng_recv()

receive data

nng_send()

send data

nng_setopt()

set socket option

nng_socket_id()

get numeric socket identifier

Connection Management

The following functions are used with either listeners, or dialers. Listeners accept incoming connection requests, and dialers make them.

nng_dial()

create and start dialer

nng_dialer_close()

close dialer

nng_dialer_create()

create dialer

nng_dialer_getopt()

get dialer option

nng_dialer_id()

get numeric dialer identifier

nng_dialer_setopt()

set dialer option

nng_dialer_start()

start dialer

nng_listen()

create and start listener

nng_listener_close()

close listener

nng_listener_create()

create listener

nng_listener_getopt()

get listener option

nng_listener_id()

get numeric listener identifier

nng_listener_setopt()

set listener option

nng_listener_start()

start listener

nng_pipe_close()

close pipe

nng_pipe_dialer()

return dialer that created pipe

nng_pipe_getopt()

get pipe option

nng_pipe_id()

get numeric pipe identifier

nng_pipe_listener()

return listener that created pipe

nng_pipe_notify()

register pipe notification callback

nng_pipe_socket()

return owning socket for pipe

Message Handling Functions

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.

nng_msg_alloc()

allocate a message

nng_msg_append()

append to message body

nng_msg_body()

return message body

nng_msg_chop()

remove data from end of message body

nng_msg_clear()

clear message body

nng_msg_dup()

duplicate a message

nng_msg_free()

free a message

nng_msg_get_pipe()

get pipe for message

nng_msg_insert()

prepend to message body

nng_msg_len()

return the message body length

nng_msg_realloc()

reallocate a message

nng_msg_set_pipe()

set pipe for message

nng_msg_trim()

remove data from start of message body

nng_recvmsg()

receive a message

nng_sendmsg()

send a message

Message Header Handling

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.

nng_msg_header()

return message header

nng_msg_header_append()

append to message header

nng_msg_header_chop()

remove data from end of message header

nng_msg_header_clear()

clear message header

nng_msg_header_insert()

prepend to message header

nng_msg_header_len()

return the message header length

nng_msg_header_trim()

remove data from start of message header

Asynchronous Operations

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.

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 (“callback”) 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:

nng_aio_abort()

abort asynchronous I/O operation

nng_aio_alloc()

allocate asynchronous I/O handle

nng_aio_cancel()

cancel asynchronous I/O operation

nng_aio_count()

return number of bytes transferred

nng_aio_finish()

finish an asynchronous I/O operation

nng_aio_free()

free asynchronous I/O handle

nng_aio_get_input()

return input parameter

nng_aio_get_msg()

get message from an asynchronous receive

nng_aio_get_output()

return output result

nng_aio_result()

return result of asynchronous operation

nng_aio_set_input()

set input parameter

nng_aio_set_iov()

set scatter/gather vector

nng_aio_set_msg()

set message for an asynchronous send

nng_aio_set_output()

set output result

nng_aio_set_timeout()

set asynchronous I/O timeout

nng_aio_stop()

stop asynchronous I/O operation

nng_aio_wait()

wait for asynchronous I/O operation

nng_recv_aio()

receive message asynchronously

nng_send_aio()

send message asynchronously

nng_sleep_aio()

sleep asynchronously

Protocols

The following functions are used to construct a socket with a specific protocol:

nng_bus_open()

open a bus socket

nng_pair_open()

open a pair socket

nng_pub_open()

open a pub socket

nng_pull_open()

open a pull socket

nng_push_open()

open a push socket

nng_rep_open()

open a rep socket

nng_req_open()

open a req socket

nng_respondent_open()

open a respondent socket

nng_sub_open()

open a sub socket

nng_surveyor_open()

open a surveyor socket

Transports

The following functions are used to register a transport for use.

nng_inproc_register()

register inproc transport

nng_ipc_register()

register IPC transport

nng_tcp_register()

register TCP transport

nng_tls_register()

register TLS transport

nng_ws_register()

register WebSocket transport

nng_wss_register()

register WebSocket Secure transport

nng_zt_register()

register ZeroTier transport

Protocol Contexts

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.

nng_ctx_close()

close context

nng_ctx_getopt()

get context option

nng_ctx_id()

get numeric context identifier

nng_ctx_open()

create context

nng_ctx_recv()

receive message using context asynchronously

nng_ctx_send()

send message using context asynchronously

nng_ctx_setopt()

set context option

URL Object

Common functionality is supplied for parsing and handling universal resource locators (URLS).

nng_url_clone()

clone URL structure

nng_url_free()

free URL structure

nng_url_parse()

create URL structure from string

Supplemental API

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.

nng_clock()

get time

nng_cv_alloc()

allocate condition variable

nng_cv_free()

free condition variable

nng_cv_until()

wait for condition or timeout

nng_cv_wait()

wait for condition

nng_cv_wake()

wake all waiters

nng_cv_wake()

wake one waiter

nng_msleep()

sleep for milliseconds

nng_mtx_alloc()

allocate mutex

nng_mtx_free()

free mutex

nng_mtx_lock()

lock mutex

nng_mtx_unlock()

unlock mutex

nng_opts_parse()

parse command line options

nng_random()

get random number

nng_thread_create()

create thread

nng_thread_destroy()

reap thread

HTTP Support

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.

Common HTTP Functions

The following functions are used to work with HTTP requests, responses, and connections.

nng_http_conn_close()

close HTTP connection

nng_http_conn_read()

read from HTTP connection

nng_http_conn_read_all()

read all from HTTP connection

nng_http_conn_read_req()

read HTTP request

nng_http_conn_read_req()

read HTTP response

nng_http_conn_write()

write to HTTP connection

nng_http_conn_write_all()

write all to HTTP connection

nng_http_conn_write()

write HTTP request

nng_http_conn_write()

write HTTP response

nng_http_req_add_header()

add HTTP request header

nng_http_req_alloc()

allocate HTTP request structure

nng_http_req_copy_data()

copy HTTP request body

nng_http_req_del_header()

delete HTTP request header

nng_http_req_free()

free HTTP request structure

nng_http_req_get_header()

return HTTP request header

nng_http_req_get_method()

return HTTP request method

nng_http_req_get_uri()

return HTTP request URI

nng_http_req_get_version()

return HTTP request protocol version

nng_http_req_set_data()

set HTTP request body

nng_http_req_set_header()

set HTTP request header

nng_http_req_set_method()

set HTTP request method

nng_http_req_set_uri()

set HTTP request URI

nng_http_req_set_version()

set HTTP request protocol version

nng_http_res_add_header()

add HTTP response header

nng_http_res_alloc()

allocate HTTP response structure

nng_http_res_alloc_error()

allocate HTTP error response

nng_http_res_copy_data()

copy HTTP response body

nng_http_res_del_header()

delete HTTP response header

nng_http_res_free()

free HTTP response structure

nng_http_res_set_data()

set HTTP response body

nng_http_res_get_header()

return HTTP response header

nng_http_res_get_reason()

return HTTP response reason

nng_http_res_get_status()

return HTTP response status

nng_http_res_get_version()

return HTTP response protocol version

nng_http_res_set_header()

set HTTP response header

nng_http_res_set_reason()

set HTTP response reason

nng_http_res_set_status()

set HTTP response status

nng_http_res_set_version()

set HTTP response protocol version

HTTP Client Functions

These functions are intended for use with HTTP client applications.

nng_http_client_alloc()

allocate HTTP client

nng_http_client_connect()

establish HTTP client connection

nng_http_client_free()

free HTTP client

nng_http_client_get_tls()

get HTTP client TLS configuration

nng_http_client_set_tls()

set HTTP client TLS configuration

HTTP Server Functions

These functions are intended for use with HTTP server applications.

nng_http_handler_alloc()

allocate HTTP server handler

nng_http_handler_free()

free HTTP server handler

nng_http_handler_get_data()

return extra data for HTTP handler

nng_http_handler_set_data()

set extra data for HTTP handler

nng_http_handler_set_host()

set host for HTTP handler

nng_http_handler_set_method()

set HTTP handler method

nng_http_handler_set_tree()

set HTTP handler to match trees

nng_http_hijack()

hijack HTTP server connection

nng_http_server_add_handler()

add HTTP server handler

nng_http_server_del_handler()

delete HTTP server handler

nng_http_server_get_tls()

get HTTP server TLS configuration

nng_http_server_get_tls()

get and hold HTTP server instance

nng_http_server_get_tls()

release HTTP server instance

nng_http_server_set_error_file()

set custom HTTP error file

nng_http_server_set_error_page()

set custom HTTP error page

nng_http_server_set_tls()

set HTTP server TLS configuration

nng_http_server_res_error()

use HTTP server error page

nng_http_server_start()

start HTTP server

nng_http_server_stop()

stop HTTP server

TLS Configuration Objects

The following functions are used to manipulate transport layer security (TLS) configuration objects.

These functions will only be present if the library has been built with TLS support.

nng_tls_config_alloc()

allocate TLS configuration

nng_tls_config_auth_mode()

set authentication mode

nng_tls_config_ca_chain()

set certificate authority chain

nng_tls_config_ca_file()

load certificate authority from file

nng_tls_config_cert_key_file_cert()

load own certificate and key from file

nng_tls_config_own_cert()

set own certificate and key

nng_tls_config_free()

free TLS configuration

nng_tls_config_server_name()

set remote server name

NNG Reference Manual vv1.0.1 © 2019 Staysail Systems, Inc, © 2018 Capitar IT Group BV
This document is supplied under the MIT License.
nanomsg™ and nng™ are trademarks of Garrett D'Amore.