static int nbssn_rselect(struct nbpcb *nbp, const struct timeval *tv, int events, struct lwp *l) { return pollsock(nbp->nbp_tso, tv, events); }
int processsocket(int sock,int inpipe) { fd_set fdset; /* selected file descriptors */ int poll,i; struct timeval tv; sigset_t set; struct sigaction act; sigemptyset(&set); sigaddset(&set,SIGUSR1); act.sa_flags=0; act.sa_mask=set; act.sa_handler=trapreset; sigaction(SIGUSR1,&act,NULL); signal(SIGPIPE,SIG_IGN); listen(sock,5); tv.tv_sec=0; tv.tv_usec=0; poll=0; runloop=1; do { FD_ZERO(&fdset); FD_SET(inpipe,&fdset); if (poll==0) { if (pollsock(sock,NULL,&fdset) !=0) continue; } else pollsock(sock,&tv,&fdset); /* open any new connections if possible */ opensock(sock,&fdset); poll=0; /* check to see if the root server has sent any data */ if (FD_ISSET(inpipe,&fdset)) { int size; size=read(inpipe,mbuf,BUF_SIZE); if (size==0) break; /* log the time */ logtime(timefname,size); writeraw(mbuf,size); } /* send the data to the clients */ if (writesock() !=0) poll=1; /* read back any data from the clients */ readsock(&fdset,tmpbuf,BUF_SIZE); /* decode the buffers here */ } while(runloop); /* close all the clients down */ for (i=0; i<msgmax; i++) { if (client[i].sock !=0) close(client[i].sock); } close(sock); return -1; }