diff options
Diffstat (limited to 'src/core/nng_impl.h')
| -rw-r--r-- | src/core/nng_impl.h | 41 |
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 */ |
