Ejemplo n.º 1
0
int evl_poll(evl_t *evl, double timeout) {
    int rv;
    struct timeval timeout_tv;
    struct timeval *timeoutp = NULL;
    if (timeout != -1.0) {
        timeout_tv.tv_sec = timeout;
        timeout_tv.tv_usec = (timeout - timeout_tv.tv_sec) * 1000000 + 0.5;
        timeoutp = &timeout_tv;
    }

    if (!(evl_common_get_fdset(evl->e, evl->r, evl_read) &&
          evl_common_get_fdset(evl->e, evl->w, evl_write) &&
          evl_common_get_fdset(evl->e, evl->x, evl_except))) return 0;
    rv = select(evl_common_upper_bound(evl->e),
                (fd_set*)evl->r->start,
                (fd_set*)evl->w->start,
                (fd_set*)evl->x->start,
                timeoutp);
    if (rv < 0 && errno == EINTR) {
        return 1;  /* pretend we succeeded and didn't time out */
    } else if (rv < 0) { /* error in select */
        return 0;  
    } else if (rv == 0) return 2;  /* timeout */
    else {
        run_handlers(evl, evl_read);
        run_handlers(evl, evl_write);
        run_handlers(evl, evl_except);
        return 1;
    }
}
Ejemplo n.º 2
0
void run_handlers(int type, int code, int value, eventhandler *list) {
	if (list != NULL) {
		if ( type  == list->type &&
		     code  == list->code &&
		     value == list->value ) {
			fprintf(stderr, "Executing handler: %s\n", list->cmdline);
			int pid = fork();
			if (pid == 0 ) {
				system(	list->cmdline );
				exit(0);
			}
		}
		/* traverse down the chain */
		run_handlers(type, code, value, list->next);
	}
}