aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-02-06 16:26:25 -0800
committerGarrett D'Amore <garrett@damore.org>2018-02-06 16:26:25 -0800
commit0fe0f3e744f19e81ae559315ff2b422158fb6329 (patch)
tree88216b31aaa9c275de28903c2234b36f4cecba14
parent51bebe0c6f137d293dbb6f1194ad3f6fca5b79e9 (diff)
downloadnng-0fe0f3e744f19e81ae559315ff2b422158fb6329.tar.gz
nng-0fe0f3e744f19e81ae559315ff2b422158fb6329.tar.bz2
nng-0fe0f3e744f19e81ae559315ff2b422158fb6329.zip
fixes #231 Need nng_aio_finish routine
-rw-r--r--docs/nng_aio_finish.adoc59
-rw-r--r--src/nng.c7
-rw-r--r--src/nng.h7
3 files changed, 73 insertions, 0 deletions
diff --git a/docs/nng_aio_finish.adoc b/docs/nng_aio_finish.adoc
new file mode 100644
index 00000000..92a680f4
--- /dev/null
+++ b/docs/nng_aio_finish.adoc
@@ -0,0 +1,59 @@
+= nng_aio_finish(3)
+:doctype: manpage
+:manmanual: nng
+:mansource: nng
+:manvolnum: 3
+: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_aio_finish - finish asynchronous I/O operation
+
+== SYNOPSIS
+
+[source, c]
+-----------
+#include <nng/nng.h>
+
+void nng_aio_finish(nng_aio *aio, int err);
+-----------
+
+
+== DESCRIPTION
+
+The `nng_aio_finish()` function marks operation associated with _aio_ as
+complete, with the status _err_. This will be the result returned by
+<<nng_aio_result#,nng_aio_result(3)>>.
+
+This function causes the callback associated with the _aio_ to called.
+
+WARNING: It is mandatory that operation "providers" call this function
+*EXACTLY ONCE* when they are finished with the operation. After calling this
+function they *MUST NOT* perform any further accesses the _aio_.
+
+WARNING: This function is only for I/O providers (those actually performing
+the operation such as HTTP handler function or a transport provider); ordinary
+users of the _aio_ should not have any need for this function.
+
+== RETURN VALUES
+
+None.
+
+== ERRORS
+
+None.
+
+== SEE ALSO
+
+<<nng_aio_alloc#,nng_aio_alloc(3)>>,
+<<nng_aio_cancel#,nng_aio_cancel(3)>>,
+<<nng_aio_result#,nng_aio_result(3)>>,
+<<nng#,nng(7)>>
+
+== COPYRIGHT
+
+{copyright}
diff --git a/src/nng.c b/src/nng.c
index 6f710993..ef5b5292 100644
--- a/src/nng.c
+++ b/src/nng.c
@@ -1136,6 +1136,13 @@ nng_aio_get_output(nng_aio *aio, unsigned index)
return (nni_aio_get_output(aio, index));
}
+void
+nng_aio_finish(nng_aio *aio, int rv)
+{
+ // Preserve the count.
+ return (nni_aio_finish(aio, rv, nni_aio_count(aio)));
+}
+
#if 0
int
nng_snapshot_create(nng_socket sock, nng_snapshot **snapp)
diff --git a/src/nng.h b/src/nng.h
index 049651c1..f4922c54 100644
--- a/src/nng.h
+++ b/src/nng.h
@@ -336,6 +336,13 @@ NNG_DECL void nng_aio_set_timeout(nng_aio *, nng_duration);
// to succeed if n <= 4, otherwise it may fail due to NNG_ENOMEM.
NNG_DECL int nng_aio_set_iov(nng_aio *, unsigned, const nng_iov *);
+// nng_aio_finish is used to "finish" an asynchronous operation.
+// It should only be called by "providers" (such as HTTP server API users).
+// The argument is the value that nng_aio_result() should return.
+// IMPORTANT: Callers must ensure that this is called EXACTLY ONCE on any
+// given aio.
+NNG_DECL void nng_aio_finish(nng_aio *, int);
+
// Message API.
NNG_DECL int nng_msg_alloc(nng_msg **, size_t);
NNG_DECL void nng_msg_free(nng_msg *);