+More interesting and less C\-conformant ways of casting your callback type
+instead have been omitted.
+.PP
+Another common scenario is having some data structure with multiple
+watchers:
+.PP
+.Vb 6
+\& struct my_biggy
+\& {
+\& int some_data;
+\& ev_timer t1;
+\& ev_timer t2;
+\& }
+.Ve
+.PP
+In this case getting the pointer to \f(CW\*(C`my_biggy\*(C'\fR is a bit more complicated,
+you need to use \f(CW\*(C`offsetof\*(C'\fR:
+.PP
+.Vb 1
+\& #include <stddef.h>
+.Ve
+.PP
+.Vb 6
+\& static void
+\& t1_cb (EV_P_ struct ev_timer *w, int revents)
+\& {
+\& struct my_biggy big = (struct my_biggy *
+\& (((char *)w) - offsetof (struct my_biggy, t1));
+\& }
+.Ve
+.PP
+.Vb 6
+\& static void
+\& t2_cb (EV_P_ struct ev_timer *w, int revents)
+\& {
+\& struct my_biggy big = (struct my_biggy *
+\& (((char *)w) - offsetof (struct my_biggy, t2));
+\& }
+.Ve