aboutsummaryrefslogtreecommitdiff
path: root/docs/man/libnng.3.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'docs/man/libnng.3.adoc')
-rw-r--r--docs/man/libnng.3.adoc319
1 files changed, 319 insertions, 0 deletions
diff --git a/docs/man/libnng.3.adoc b/docs/man/libnng.3.adoc
new file mode 100644
index 00000000..ba68b17c
--- /dev/null
+++ b/docs/man/libnng.3.adoc
@@ -0,0 +1,319 @@
+= libnng(3)
+//
+// Copyright 2018 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
+
+libnng - nanomsg next generation library
+
+== SYNOPSIS
+
+*cc* [_flags_] _files_ *-lnng* [_libraries_]
+
+== DESCRIPTION
+
+The <<nng.7#,_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.3#,nng_alloc()>>|allocate memory
+|<<nng_free.3#,nng_free()>>|free memory
+|<<nng_strerror.3#,nng_strerror()>>|return an error description
+|<<nng_version.3#,nng_version()>>|report library version
+|===
+
+=== Socket Functions
+
+The following functions operate on sockets.
+
+|===
+|<<nng_close.3#,nng_close()>>|close socket
+|<<nng_dial.3#,nng_dial()>>|create and start dialer
+|<<nng_getopt.3#,nng_getopt()>>|get socket option
+|<<nng_listen.3#,nng_listen()>>|create and start listener
+|<<nng_recv.3#,nng_recv()>>|receive data
+|<<nng_send.3#,nng_send()>>|send data
+|<<nng_setopt.3#,nng_setopt()>>|set socket option
+|===
+
+=== Connection Management
+
+The following functions are used with either listeners, or dialers.
+Listeners accept incoming connection requets, and dialers make them.
+
+|===
+|<<nng_dial.3#,nng_dial()>>|create and start dialer
+|<<nng_dialer_close.3#,nng_dialer_close()>>|close dialer
+|<<nng_dialer_create.3#,nng_dialer_create()>>|create dialer
+|<<nng_dialer_getopt.3#,nng_dialer_getopt()>>|get dialer option
+|<<nng_dialer_setopt.3#,nng_dialer_setopt()>>|set dialer option
+|<<nng_dialer_start.3#,nng_dialer_start()>>|start dialer
+|<<nng_listen.3#,nng_listen()>>|create and start listener
+|<<nng_listener_close.3#,nng_listener_close()>>|close listener
+|<<nng_listener_create.3#,nng_listener_create()>>|create listener
+|<<nng_listener_getopt.3#,nng_listener_getopt()>>|get listener option
+|<<nng_listener_setopt.3#,nng_listener_setopt()>>|set listener option
+|<<nng_listener_start.3#,nng_listener_start()>>|start listener
+|<<nng_pipe_close.3#,nng_pipe_close()>>|close pipe
+|<<nng_pipe_getopt.3#,nng_pipe_getopt()>>|get pipe option
+|===
+
+=== 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.3#,nng_msg_alloc()>>|allocate a message
+|<<nng_msg_append.3#,nng_msg_append()>>|append to message body
+|<<nng_msg_body.3#,nng_msg_body()>>|return message body
+|<<nng_msg_chop.3#,nng_msg_chop()>>|remove data from end of message body
+|<<nng_msg_clear.3#,nng_msg_clear()>>|clear message body
+|<<nng_msg_dup.3#,nng_msg_dup()>>|duplicate a message
+|<<nng_msg_free.3#,nng_msg_free()>>|free a message
+|<<nng_msg_get_pipe.3#,nng_msg_get_pipe()>>|get pipe for message
+|<<nng_msg_insert.3#,nng_msg_insert()>>|prepend to message body
+|<<nng_msg_len.3#,nng_msg_len()>>|return the message body length
+|<<nng_msg_realloc.3#,nng_msg_realloc()>>|reallocate a message
+|<<nng_msg_set_pipe.3#,nng_msg_set_pipe()>>|set pipe for message
+|<<nng_msg_trim.3#,nng_msg_trim()>>|remove data from start of message body
+|<<nng_recvmsg.3#,nng_recvmsg()>>|receive a message
+|<<nng_sendmsg.3#,nng_sendmsg()>>|send a message
+|===
+
+==== Message Header Handling
+
+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.
+
+|===
+|<<nng_msg_header.3#,nng_msg_header()>>|return message header
+|<<nng_msg_header_append.3#,nng_msg_header_append()>>|append to message header
+|<<nng_msg_header_chop.3#,nng_msg_header_chop()>>|remove data from end of message header
+|<<nng_msg_header_clear.3#,nng_msg_header_clear()>>|clear message header
+|<<nng_msg_header_insert.3#,nng_msg_header_insert()>>|prepend to message header
+|<<nng_msg_header_len.3#,nng_msg_header_len()>>|return the message header length
+|<<nng_msg_header_trim.3#,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.3#,`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
+("callback") is executed.
+
+A context structure, an <<nng_aio.5#,`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.3#,nng_aio_abort()>>|abort asynchronous I/O operation
+|<<nng_aio_alloc.3#,nng_aio_alloc()>>|allocate asynchronous I/O handle
+|<<nng_aio_cancel.3#,nng_aio_cancel()>>|cancel asynchronous I/O operation
+|<<nng_aio_count.3#,nng_aio_count()>>|return number of bytes transferred
+|<<nng_aio_finish.3#,nng_aio_finish()>>|finish an asynchronous I/O operation
+|<<nng_aio_free.3#,nng_aio_free()>>|free asynchronous I/O handle
+|<<nng_aio_get_input.3#,nng_aio_get_input()>>|return input parameter
+|<<nng_aio_get_msg.3#,nng_aio_get_msg()>>|get message from an asynchronous receive
+|<<nng_aio_get_output.3#,nng_aio_get_output()>>|return output result
+|<<nng_aio_result.3#,nng_aio_result()>>|return result of asynchronous operation
+|<<nng_aio_set_input.3#,nng_aio_set_input()>>|set input parameter
+|<<nng_aio_set_iov.3#,nng_aio_set_iov()>>|set scatter/gather vector
+|<<nng_aio_set_msg.3#,nng_aio_set_msg()>>|set message for an asynchronous send
+|<<nng_aio_set_output.3#,nng_aio_set_output()>>|set output result
+|<<nng_aio_set_timeout.3#,nng_aio_set_timeout()>>|set asynchronous I/O timeout
+|<<nng_aio_stop.3#,nng_aio_stop()>>|stop asynchronous I/O operation
+|<<nng_aio_wait.3#,nng_aio_wait()>>|wait for asynchronous I/O operation
+|<<nng_recv_aio.3#,nng_recv_aio()>>|receive message asynchronously
+|<<nng_send_aio.3#,nng_send_aio()>>|send message asynchronously
+|<<nng_sleep_aio.3#,nng_sleep_aio()>>|sleep asynchronously
+|===
+
+=== Protocols
+
+The following functions are used to construct a socket with a specific protocol:
+
+|===
+|<<nng_bus_open.3#,nng_bus_open()>>|open a bus socket
+|<<nng_pair_open.3#,nng_pair_open()>>|open a pair socket
+|<<nng_pub_open.3#,nng_pub_open()>>|open a pub socket
+|<<nng_pull_open.3#,nng_pull_open()>>|open a pull socket
+|<<nng_push_open.3#,nng_push_open()>>|open a push socket
+|<<nng_rep_open.3#,nng_rep_open()>>|open a rep socket
+|<<nng_req_open.3#,nng_req_open()>>|open a req socket
+|<<nng_respondent_open.3#,nng_respondent_open()>>|open a respondent socket
+|<<nng_sub_open.3#,nng_sub_open()>>|open a sub socket
+|<<nng_surveyor_open.3#,nng_surveyor_open()>>|open a surveyor socket
+|===
+
+=== Transports
+
+The following functions are used to register a transport for use.
+
+|===
+| <<nng_inproc_register.3#,nng_inproc_register()>>|register inproc transport
+| <<nng_ipc_register.3#,nng_ipc_register()>>|register IPC transport
+| <<nng_tcp_register.3#,nng_tcp_register()>>|register TCP transport
+| <<nng_tls_register.3#,nng_tls_register()>>|register TLS transport
+| <<nng_ws_register.3#,nng_ws_register()>>|register WebSocket transport
+| <<nng_wss_register.3#,nng_wss_register()>>|register WebSocket Secure transport
+| <<nng_zerotier_register.3#,nng_zerotier_register()>>|register ZeroTier transport
+|===
+
+=== URL Object
+
+Common functionality is supplied for parsing and handling
+universal resource locators (URLS).
+
+|===
+|<<nng_url_clone.3#,nng_url_clone()>>|clone URL structure
+|<<nng_url_free.3#,nng_url_free()>>|free URL structure
+|<<nng_url_parse.3#,nng_url_parse()>>|create URL structure from string
+|===
+
+
+=== 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.3http#,nng_http_conn_close()>>|close HTTP connection
+|<<nng_http_conn_read.3http#,nng_http_conn_read()>>|read from HTTP connection
+|<<nng_http_conn_read_all.3http#,nng_http_conn_read_all()>>|read all from HTTP connection
+|<<nng_http_conn_read_req.3http#,nng_http_conn_read_req()>>|read HTTP request
+|<<nng_http_conn_read_res.3http#,nng_http_conn_read_req()>>|read HTTP response
+|<<nng_http_conn_write.3http#,nng_http_conn_write()>>|write to HTTP connection
+|<<nng_http_conn_write_all.3http#,nng_http_conn_write_all()>>|write all to HTTP connection
+|<<nng_http_conn_write_req.3http#,nng_http_conn_write()>>|write HTTP request
+|<<nng_http_conn_write_res.3http#,nng_http_conn_write()>>|write HTTP response
+|<<nng_http_req_add_header.3http#,nng_http_req_add_header()>>|add HTTP request header
+|<<nng_http_req_alloc.3http#,nng_http_req_alloc()>>|allocate HTTP request structure
+|<<nng_http_req_copy_data.3http#,nng_http_req_copy_data()>>|copy HTTP request body
+|<<nng_http_req_del_header.3http#,nng_http_req_del_header()>>|delete HTTP request header
+|<<nng_http_req_free.3http#,nng_http_req_free()>>|free HTTP request structure
+|<<nng_http_req_get_header.3http#,nng_http_req_get_header()>>|return HTTP request header
+|<<nng_http_req_get_method.3http#,nng_http_req_get_method()>>|return HTTP request method
+|<<nng_http_req_get_uri.3http#,nng_http_req_get_uri()>>|return HTTP request URI
+|<<nng_http_req_get_version.3http#,nng_http_req_get_version()>>|return HTTP request protocol version
+|<<nng_http_req_set_data.3http#,nng_http_req_set_data()>>|set HTTP request body
+|<<nng_http_req_set_header.3http#,nng_http_req_set_header()>>|set HTTP request header
+|<<nng_http_req_set_method.3http#,nng_http_req_set_method()>>|set HTTP request method
+|<<nng_http_req_set_uri.3http#,nng_http_req_set_uri()>>|set HTTP request URI
+|<<nng_http_req_set_version.3http#,nng_http_req_set_version()>>|set HTTP request protocol version
+|<<nng_http_res_add_header.3http#,nng_http_res_add_header()>>|add HTTP response header
+|<<nng_http_res_alloc.3http#,nng_http_res_alloc()>>|allocate HTTP response structure
+|<<nng_http_res_alloc_error.3http#,nng_http_res_alloc_error()>>|allocate HTTP error response
+|<<nng_http_res_copy_data.3http#,nng_http_res_copy_data()>>|copy HTTP response body
+|<<nng_http_res_del_header.3http#,nng_http_res_del_header()>>|delete HTTP response header
+|<<nng_http_res_free.3http#,nng_http_res_free()>>|free HTTP response structure
+|<<nng_http_res_set_data.3http#,nng_http_res_set_data()>>|set HTTP response body
+|<<nng_http_res_get_header.3http#,nng_http_res_get_header()>>|return HTTP response header
+|<<nng_http_res_get_reason.3http#,nng_http_res_get_reason()>>|return HTTP response reason
+|<<nng_http_res_get_status.3http#,nng_http_res_get_status()>>|return HTTP response status
+|<<nng_http_res_get_version.3http#,nng_http_res_get_version()>>|return HTTP response protocol version
+|<<nng_http_res_set_header.3http#,nng_http_res_set_header()>>|set HTTP response header
+|<<nng_http_res_set_reason.3http#,nng_http_res_set_reason()>>|set HTTP response reason
+|<<nng_http_res_set_status.3http#,nng_http_res_set_status()>>|set HTTP response status
+|<<nng_http_res_set_version.3http#,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.3http#,nng_http_client_alloc()>>|allocate HTTP client
+| <<nng_http_client_connect.3http#,nng_http_client_connect()>>|establish HTTP client connection
+| <<nng_http_client_free.3http#,nng_http_client_free()>>|free HTTP client
+| <<nng_http_client_get_tls.3http#,nng_http_client_get_tls()>>|get HTTP client TLS configuration
+| <<nng_http_client_set_tls.3http#,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.3http#,nng_http_handler_alloc()>>|allocate HTTP server handler
+|<<nng_http_handler_free.3http#,nng_http_handler_free()>>|free HTTP server handler
+|<<nng_http_handler_get_data.3http#,nng_http_handler_get_data()>>|return extra data for HTTP handler
+|<<nng_http_handler_set_data.3http#,nng_http_handler_set_data()>>|set extra data for HTTP handler
+|<<nng_http_handler_set_host.3http#,nng_http_handler_set_host()>>|set host for HTTP handler
+|<<nng_http_handler_set_method.3http#,nng_http_handler_set_method()>>|set HTTP handler method
+|<<nng_http_handler_set_tree.3http#,nng_http_handler_set_tree()>>|set HTTP handler to match trees
+|<<nng_http_hijack.3http#,nng_http_hijack()>>|hijack HTTP server connection
+|<<nng_http_server_add_handler.3http#,nng_http_server_add_handler()>>|add HTTP server handler
+|<<nng_http_server_del_handler.3http#,nng_http_server_del_handler()>>|delete HTTP server handler
+|<<nng_http_server_get_tls.3http#,nng_http_server_get_tls()>>|get HTTP server TLS configuration
+|<<nng_http_server_hold.3http#,nng_http_server_get_tls()>>|get and hold HTTP server instance
+|<<nng_http_server_release.3http#,nng_http_server_get_tls()>>|release HTTP server instance
+|<<nng_http_server_set_tls.3http#,nng_http_server_set_tls()>>|set HTTP server TLS configuration
+|<<nng_http_server_start.3http#,nng_http_server_start()>>|start HTTP server
+|<<nng_http_server_stop.3http#,nng_http_server_stop()>>|stop HTTP server
+|===
+
+=== TLS Configuration Objects
+
+The following functions are used to manipulate transport layer security
+(TLS) configuration objects.
+
+NOTE: These functions will only be present if the library has been built
+with TLS support.
+
+|===
+|<<nng_tls_config_alloc.3tls#,nng_tls_config_alloc()>>|allocate TLS configuration
+|<<nng_tls_config_auth_mode.3tls#,nng_tls_config_auth_mode()>>|set authentication mode
+|<<nng_tls_config_ca_chain.3tls#,nng_tls_config_ca_chain()>>|set certificate authority chain
+|<<nng_tls_config_ca_file.3tls#,nng_tls_config_ca_file()>>|load certificate authority from file
+|<<nng_tls_config_cert_key_file.3tls#,nng_tls_config_cert_key_file_cert()>>|load own certificate and key from file
+|<<nng_tls_config_own_cert.3tls#,nng_tls_config_own_cert()>>|set own certificate and key
+|<<nng_tls_config_free.3tls#,nng_tls_config_free()>>|free TLS configuration
+|<<nng_tls_config_server_name.3tls#,nng_tls_config_server_name()>>|set remote server name
+|===
+
+
+== SEE ALSO
+
+<<nng_compat.3compat#,nng_compat(3compat)>>,
+<<nng.7#,nng(7)>>