예제 #1
0
void li_event_io_set_events(liEventIO *io, int events) {
	if (events == io->events) return;
	io->events = events;

	if (li_event_attached(io) && li_event_active(io)) {
		liEventLoop *loop = io->base.link_watchers.data;
		LI_FORCE_ASSERT(NULL != loop);

		ev_ref(loop->loop);

		ev_io_stop(loop->loop, &io->libevmess.io);
		ev_io_set(&io->libevmess.io, io->libevmess.io.fd, io_events_to_libev(events));
		ev_io_start(loop->loop, &io->libevmess.io);

		ev_unref(loop->loop);
	} else {
		ev_io_set(&io->libevmess.io, io->libevmess.io.fd, io_events_to_libev(events));
	}
}
예제 #2
0
파일: events.c 프로젝트: Aivaras/lighttpd2
void li_event_io_init(liEventLoop *loop, liEventIO *io, liEventCallback callback, int fd, int events) {
	memset(io, 0, sizeof(*io));
	io->base.type = LI_EVT_IO;
	io->base.keep_loop_alive = 1;
	io->base.callback = callback;
	io->events = events;
	ev_init(&io->libevmess.w, NULL);
	ev_io_set(&io->libevmess.io, fd, io_events_to_libev(events));
	ev_set_cb(&io->libevmess.io, event_io_cb);

	if (NULL != loop) li_event_attach(loop, io);
}