Beispiel #1
0
static int
nbssn_rselect(struct nbpcb *nbp, const struct timeval *tv, int events,
	struct lwp *l)
{

	return pollsock(nbp->nbp_tso, tv, events);
}
Beispiel #2
0
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;
}