+.PP
+Method 2: This would be just like method 1, but you run \f(CW\*(C`adns_afterpoll\*(C'\fR
+in the prepare watcher and would dispose of the check watcher.
+.PP
+Method 3: If the module to be embedded supports explicit event
+notification (adns does), you can also make use of the actual watcher
+callbacks, and only destroy/create the watchers in the prepare watcher.
+.PP
+.Vb 5
+\& static void
+\& timer_cb (EV_P_ ev_timer *w, int revents)
+\& {
+\& adns_state ads = (adns_state)w->data;
+\& update_now (EV_A);
+.Ve
+.PP
+.Vb 2
+\& adns_processtimeouts (ads, &tv_now);
+\& }
+.Ve
+.PP
+.Vb 5
+\& static void
+\& io_cb (EV_P_ ev_io *w, int revents)
+\& {
+\& adns_state ads = (adns_state)w->data;
+\& update_now (EV_A);
+.Ve
+.PP
+.Vb 3
+\& if (revents & EV_READ ) adns_processreadable (ads, w->fd, &tv_now);
+\& if (revents & EV_WRITE) adns_processwriteable (ads, w->fd, &tv_now);
+\& }
+.Ve
+.PP
+.Vb 1
+\& // do not ever call adns_afterpoll
+.Ve
+.PP
+Method 4: Do not use a prepare or check watcher because the module you
+want to embed is too inflexible to support it. Instead, youc na override
+their poll function. The drawback with this solution is that the main
+loop is now no longer controllable by \s-1EV\s0. The \f(CW\*(C`Glib::EV\*(C'\fR module does
+this.
+.PP
+.Vb 4
+\& static gint
+\& event_poll_func (GPollFD *fds, guint nfds, gint timeout)
+\& {
+\& int got_events = 0;
+.Ve
+.PP
+.Vb 2
+\& for (n = 0; n < nfds; ++n)
+\& // create/start io watcher that sets the relevant bits in fds[n] and increment got_events
+.Ve
+.PP
+.Vb 2
+\& if (timeout >= 0)
+\& // create/start timer
+.Ve
+.PP
+.Vb 2
+\& // poll
+\& ev_loop (EV_A_ 0);
+.Ve
+.PP
+.Vb 3
+\& // stop timer again
+\& if (timeout >= 0)
+\& ev_timer_stop (EV_A_ &to);
+.Ve
+.PP
+.Vb 3
+\& // stop io watchers again - their callbacks should have set
+\& for (n = 0; n < nfds; ++n)
+\& ev_io_stop (EV_A_ iow [n]);
+.Ve
+.PP
+.Vb 2
+\& return got_events;
+\& }
+.Ve