Writing Monitors for the Event Monitoring Service (December 1999)
126 Chapter3
Creating a Resource Monitor
Processing a Terminate Event
void process_requests(void)
{
rm_object_addr obj;
rm_return_type return_type;
rm_error_type error_code;
rm_select_type select_data;
struct timeval timeout;
while (1) {
/*************************************************************************/
/* Setting the select_data to NULL means we are willing to wait */
/* indefinitely for an event. */
/* */
/* This code shows how to set a user timeout of 10 seconds. The monitor */
/* may also use the readfds mask to listen to file descriptors/sockets/ */
/* streams queues/etc. that it knows about. */
/* */
/* FD_ZERO(&select_data.readfds); */
/* FD_ZERO(&select_data.writefds); */
/* FD_ZERO(&select_data.exceptfds); */
/* timeout.tv_sec = 10; */
/* timeout.tv_usec = 0; */
/* */
/* select_data.timeout = &timeout; */
/* */
/* if (rm_get_next_event(&select_data, &return_type, &obj, */
/* &error_code) == -1) { */
/*************************************************************************/
if (rm_get_next_event((rm_select_type *)NULL, &return_type, &obj,
&error_code) == -1) {
rm_perror(“Error in rm_get_next_event“, error_code);
break; /* Returns to main */
}
switch (return_type) {
case RM_SUBCLASS_REQUEST_EVENT:
send_subclass_reply(obj);
break;