MEDIUM: polling: prepare to call the iocb() function when defined.

We will need this to centralize I/O callbacks. Nobody sets it right
now so the code should have no impact.
diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c
index b27f372..556abcc 100644
--- a/src/ev_kqueue.c
+++ b/src/ev_kqueue.c
@@ -138,21 +138,27 @@
 
 	for (count = 0; count < status; count++) {
 		fd = kev[count].ident;
+
+		fdtab[fd].ev &= FD_POLL_STICKY;
 		if (kev[count].filter ==  EVFILT_READ) {
 			if (FD_ISSET(fd, fd_evts[DIR_RD])) {
 				if (!fdtab[fd].owner)
 					continue;
 				fdtab[fd].ev |= FD_POLL_IN;
-				fdtab[fd].cb[DIR_RD].f(fd);
+				if (fdtab[fd].cb[DIR_RD].f)
+					fdtab[fd].cb[DIR_RD].f(fd);
 			}
 		} else if (kev[count].filter ==  EVFILT_WRITE) {
 			if (FD_ISSET(fd, fd_evts[DIR_WR])) {
 				if (!fdtab[fd].owner)
 					continue;
 				fdtab[fd].ev |= FD_POLL_OUT;
-				fdtab[fd].cb[DIR_WR].f(fd);
+				if (fdtab[fd].cb[DIR_WR].f)
+					fdtab[fd].cb[DIR_WR].f(fd)
 			}
 		}
+		if (fdtab[fd].iocb && fdtab[fd].owner && fdtab[fd].ev)
+			fdtab[fd].iocb(fd);
 	}
 }