--- nsca-2.7.2/src/nsca.c.orig 2014-09-29 10:32:13.000000000 +1000 +++ nsca-2.7.2/src/nsca.c 2014-09-30 16:16:03.000000000 +1000 @@ -516,11 +516,11 @@ pfds[npfds].fd=fd; pfds[npfds].events=events; + pfds[npfds].revents=0; npfds++; } - /* register a read handler */ static void register_read_handler(int fd, void (*fp)(int, void *), void *data){ int i; @@ -639,7 +639,8 @@ data=rhand[hand].data; rhand[hand].handler=NULL; rhand[hand].data=NULL; - handler(pfds[i].fd,data); + if((pfds[i].revents&POLLNVAL)==0) + handler(pfds[i].fd,data); } if((pfds[i].events&POLLOUT) && (pfds[i].revents&(POLLOUT|POLLERR|POLLHUP|POLLNVAL))){ pfds[i].events&=~POLLOUT; @@ -648,7 +649,8 @@ data=whand[hand].data; whand[hand].handler=NULL; whand[hand].data=NULL; - handler(pfds[i].fd,data); + if((pfds[i].revents&POLLNVAL)==0) + handler(pfds[i].fd,data); } }