From c9593dfc5796a98b94ef516fce662f2e040acffe Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sat, 21 Jan 2017 20:05:48 -0800 Subject: Initial swag at notification pipes (not used yet). --- src/core/platform.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/core/platform.h') diff --git a/src/core/platform.h b/src/core/platform.h index 7afd33ef..14b3aaed 100644 --- a/src/core/platform.h +++ b/src/core/platform.h @@ -256,6 +256,30 @@ extern int nni_plat_ipc_recv(nni_plat_ipcsock *, nni_iov *, int); // to seed up to 256 bytes of data. extern void nni_plat_seed_prng(void *, size_t); +// nni_plat_pipe creates a pair of linked file descriptors that are +// suitable for notification via SENDFD/RECVFD. These are platform +// specific and exposed to applications for integration into event loops. +// The first pipe is written to by nng to notify, and the second pipe is +// generally read from to clear the event. The implementation is not +// obliged to provide two pipes -- for example eventfd can be used with +// just a single file descriptor. In such a case the implementation may +// just provide the same value twice. +extern int nni_plat_pipe_open(int *, int *); + +// nni_plat_pipe_push pushses a notification to the pipe. Usually this +// will just be a non-blocking attempt to write a single byte. It may +// however use any other underlying system call that is appropriate. +extern void nni_plat_pipe_push(int); + +// nni_plat_pipe_pull pulls a notification from the pipe. Usually this +// will just be a non-blocking read. (The pull should attempt to read +// all data on the pipe.) +extern void nni_plat_pipe_pull(int); + +// nni_plat_pipe_close closes both pipes that were provided by the open +// routine. +extern void nni_plat_pipe_close(int, int); + // Actual platforms we support. This is included up front so that we can // get the specific types that are supplied by the platform. #if defined(PLATFORM_POSIX) -- cgit v1.2.3-70-g09d2