1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. SPDX-License-Identifier: CC-BY-4.0
3 .. CAUTION: this document is generated from source in doc/src/rtd.
4 .. To make changes edit the source and recompile the document.
5 .. Do NOT make changes directly to .rst or .md files.
7 ============================================================================================
8 Man Page: rmr_get_rcvfd
9 ============================================================================================
33 void* rmr_get_rcvfd( void* ctx )
40 The ``rmr_get_rcvfd`` function returns a file descriptor
41 which may be given to epoll_wait() by an application that
42 wishes to use event poll in a single thread rather than block
43 on the arrival of a message via calls to rmr_rcv_msg(). When
44 epoll_wait() indicates that this file descriptor is ready, a
45 call to rmr_rcv_msg() will not block as at least one message
48 The context (ctx) pointer passed in is the pointer returned
49 by the call to rmr_init().
55 The ``rmr_get_rcvfd`` function returns a file descriptor
56 greater or equal to 0 on success and -1 on error.
62 The following error values are specifically set by this RMR
63 function. In some cases the error message of a system call is
64 propagated up, and thus this list might be incomplete.
73 The use of this function is invalid in this environment.
81 The following short code bit illustrates the use of this
82 function. Error checking has been omitted for clarity.
89 #include <sys/epoll.h>
93 int rcv_fd; // pollable fd
94 void* mrc; //msg router context
95 struct epoll_event events[10]; // support 10 events to poll
96 struct epoll_event epe; // event definition for event to listen to
98 rmr_mbuf_t* msg = NULL;
101 int norm_msg_size = 1500; // 95% messages are less than this
103 mrc = rmr_init( "43086", norm_msg_size, RMRFL_NONE );
104 rcv_fd = rmr_get_rcvfd( mrc );
106 ep_fd = epoll_create1( 0 ); // initialise epoll environment
107 epe.events = EPOLLIN;
108 epe.data.fd = rcv_fd;
109 epoll_ctl( ep_fd, EPOLL_CTL_ADD, rcv_fd, &epe ); // add our info to the mix
112 nready = epoll_wait( ep_fd, events, 10, -1 ); // -1 == block forever (no timeout)
113 for( i = 0; i < nready && i < 10; i++ ) { // loop through to find what is ready
114 if( events[i].data.fd == rcv_fd ) { // RMR has something
115 msg = rmr_rcv_msg( mrc, msg );
117 // do something with msg
121 // check for other ready fds....
131 rmr_alloc_msg(3), rmr_call(3), rmr_free_msg(3),
132 rmr_payload_size(3), rmr_send_msg(3), rmr_rcv_msg(3),
133 rmr_rcv_specific(3), rmr_rts_msg(3), rmr_ready(3),
134 rmr_fib(3), rmr_has_str(3), rmr_tokenise(3), rmr_mk_ring(3),