aboutsummaryrefslogtreecommitdiff
path: root/src/core/nng_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/nng_impl.h')
-rw-r--r--src/core/nng_impl.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/core/nng_impl.h b/src/core/nng_impl.h
index a25b87a4..a62ac101 100644
--- a/src/core/nng_impl.h
+++ b/src/core/nng_impl.h
@@ -61,4 +61,45 @@ extern void nni_snprintf(char *, size_t, const char *, ...);
*/
extern void nni_panic(const char *, ...);
+/*
+ * Message queues. Message queues work in some ways like Go channels;
+ * they are a thread-safe way to pass messages between subsystems.
+ */
+typedef struct nni_msgqueue *nni_msgqueue_t;
+
+/*
+ * nni_msgqueue_create creates a message queue with the given capacity,
+ * which must be a positive number. It returns NNG_EINVAL if the capacity
+ * is invalid, or NNG_ENOMEM if resources cannot be allocated.
+ */
+extern int nni_msgqueue_create(nni_msgqueue_t *, int);
+
+/*
+ * nni_msgqueue_destroy destroys a message queue. It will also free any
+ * messages that may be in the queue.
+ */
+extern void nni_msgqueue_destroy(nni_msgqueue_t);
+
+extern int nni_msgqueue_len(nni_msgqueue_t);
+extern int nni_msgqueue_cap(nni_msgqueue_t);
+
+/*
+ * nni_msgqueue_put attempts to put a message to the queue. It will wait
+ * for the timeout (us), if the value is positive. If the value is negative
+ * then it will wait forever. If the value is zero, it will just check, and
+ * return immediately whether a message can be put or not. Valid returns are
+ * NNG_ECLOSED if the queue is closed or NNG_ETIMEDOUT if the message cannot
+ * be placed after a time, or NNG_EAGAIN if the operation cannot succeed
+ * immediately and a zero timeout is specified. Note that timeout granularity
+ * may be limited -- for example Windows systems have a millisecond resolution
+ * timeout capability.
+ */
+extern int nni_msgqueue_put(nni_msgqueue_t, nng_msg_t, int);
+
+/*
+ * nni_msgqueue_get gets the message from the queue, using a timeout just
+ * like nni_msgqueue_put.
+ */
+extern int nni_msgqueue_get(nni_msgqueue_t, nng_msg_t *, int);
+
#endif /* NNG_IMPL_H */