Writing Monitors for the Event Monitoring Service (December 1999)
Chapter 3 131
Creating a Resource Monitor
Deļ¬ning an Internal Timeout
timer.tv_sec = (time_t)timeout;
timer.tv_usec = (long)0;
select_data.timeout = &timer;
}
/**************************************************************************/
/* */
/* Note: Since we don't want EMS dictating when we are to terminate or */
/* to unregister, the following ems_responses are ignored: */
/* RM_UNREGISTER_EVENT and RM_TERMINATE_EVENT */
/* */
/**************************************************************************/
while (! done)
{
/*
** Since rm_get_next_event alters the file descriptors we need
** to reinitialize them each time (if the monitor is enabled).
*/
select_data.readfds = registered_fds.readfds;
select_data.writefds = registered_fds.writefds;
select_data.exceptfds = registered_fds.exceptfds;
select_data.timeout = &timer;
if (rm_get_next_event (&select_data, &ems_response,
&obj, &error_code) == RM_FAILURE)
{
log_ems_error (EMS_GET_NEXT_EVENT, error_code);
*status = EMS_ERROR;
return;
}
switch (ems_response)
{
case RM_SUBCLASS_REQUEST_EVENT:
process_subclass_event(obj);
break;
case RM_MONITOR_REQUEST_EVENT:
process_monitor_request_event(obj);