static int exec_RemoveFromSet(struct physical *p, fd_set *r, fd_set *w, fd_set *e) { struct execdevice *dev = device2exec(p->handler); int sets; p->handler->removefromset = NULL; sets = physical_RemoveFromSet(p, r, w, e); p->handler->removefromset = exec_RemoveFromSet; if (dev->fd_out >= 0) { if (w && FD_ISSET(dev->fd_out, w)) { FD_CLR(dev->fd_out, w); log_Printf(LogTIMER, "%s: fdunset(w) %d\n", p->link.name, dev->fd_out); sets++; } if (e && FD_ISSET(dev->fd_out, e)) { FD_CLR(dev->fd_out, e); log_Printf(LogTIMER, "%s: fdunset(e) %d\n", p->link.name, dev->fd_out); sets++; } } return sets; }
static int ether_RemoveFromSet(struct physical *p, fd_set *r, fd_set *w, fd_set *e) { struct etherdevice *dev = device2ether(p->handler); int result; if (r && dev->cs >= 0 && FD_ISSET(dev->cs, r)) { FD_CLR(dev->cs, r); log_Printf(LogTIMER, "%s: fdunset(ctrl) %d\n", p->link.name, dev->cs); result = 1; } else result = 0; /* Careful... physical_RemoveFromSet() called us ! */ p->handler->removefromset = NULL; result += physical_RemoveFromSet(p, r, w, e); p->handler->removefromset = ether_RemoveFromSet; return result; }
int datalink_RemoveFromSet(struct datalink *dl, fd_set *r, fd_set *w, fd_set *e) { return physical_RemoveFromSet(dl->physical, r, w, e); }