= nng_aio(5)
//
// 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

nng_aio - asynchronous I/O handle

== SYNOPSIS

[source, c]
----
#include <nng/nng.h>

typedef struct nng_aio nng_aio;
----

== DESCRIPTION

An `nng_aio`(((aio))) is an opaque structure used in conjuction with
((asynchronous I/O)) operations.
Every asynchronous operation uses one of these structures, each of which
can only be used with a single operation at a time.

Asynchronous operations are performed without blocking calling application
threads.
Instead the application registers a "`callback`" function to be executed
when the operation is complete (whether successfully or not).
This callback will be executed exactly once.

The asynchronous I/O framework in _nng_ also supports cancellation of
operations that are already in progress
(see `<<nng_aio_cancel.3#,nng_aio_cancel()>>`), as well setting a maximum
timeout for them to complete within
(see `<<nng_aio_set_timeout.3#,nng_aio_set_timeout()>>`).

It is also possible to initiate an asynchronous operation, and wait for it to
complete using `<<nng_aio_wait.3#,nng_aio_wait()>>`.

These structures are created using the `<<nng_aio_alloc.3#,nng_aio_alloc()>>`,
and destroyed using `<<nng_aio_free.3#,nng_aio_free()>>`.

== SEE ALSO

<<nng_aio_abort.3#,nng_aio_abort(3)>>,
<<nng_aio_alloc.3#,nng_aio_alloc(3)>>,
<<nng_aio_cancel.3#,nng_aio_cancel(3)>>,
<<nng_aio_count.3#,nng_aio_count(3)>>,
<<nng_aio_free.3#,nng_aio_free(3)>>,
<<nng_aio_get_input.3#,nng_aio_get_input(3)>>,
<<nng_aio_get_msg.3#,nng_aio_get_msg(3)>>,
<<nng_aio_get_output.3#,nng_aio_get_output(3)>>,
<<nng_aio_result.3#,nng_aio_result(3)>>,
<<nng_aio_set_input.3#,nng_aio_set_input(3)>>,
<<nng_aio_set_iov.3#,nng_aio_set_iov(3)>>,
<<nng_aio_set_msg.3#,nng_aio_set_msg(3)>>,
<<nng_aio_set_timeout.3#,nng_aio_set_timeout(3)>>,
<<nng_aio_stop.3#,nng_aio_stop(3)>>,
<<nng_aio_wait.3#,nng_aio_wait(3)>>,
<<nng_strerror.3#,nng_strerror(3)>>,
<<nng_aio.5#,nng_aio(5)>>,
<<nng.7#,nng(7)>>
