fds = (*rx_select) (FD_SETSIZE, &rfds, 0, 0, tvp);
fds = (*rx_select) (rx_maxSocketNumber + 1, &rfds, 0, 0, tvp);
rxi_Listener(void){    u_long host;    u_short port;    register struct rx_packet *p = (struct rx_packet *) 0;    fd_set rfds;    int socket;    int fds;    struct clock cv;    long nextPollTime;		       /* time to next poll FD before				        * sleeping */    int lastPollWorked, doingPoll;     /* true iff last poll was useful */    struct timeval tv, *tvp;    clock_NewTime();    lastPollWorked = 0;    nextPollTime = 0;    for (;;) {	/*	 * Grab a new packet only if necessary (otherwise re-use the old one)	 */	if (!p) {	    if (!(p = rxi_AllocPacket(RX_PACKET_CLASS_RECEIVE)))		osi_Panic("rxi_Listener: no packets!");	/* Shouldn't happen */	}	/* Wait for the next event time or a packet to arrive. */	/*	 * event_RaiseEvents schedules any events whose time has come and	 * then atomically computes the time to the next event, guaranteeing	 * that this is positive.  If there is no next event, it returns 0	 */	if (!rxevent_RaiseEvents(&cv))	    tvp = (struct timeval *) 0;	else {	    /*	     * It's important to copy cv to tv, because the 4.3 documentation	     * for select threatens that *tv may be updated after a select,	     * in future editions of the system, to indicate how much of the	     * time period has elapsed.  So we shouldn't rely on tv not being	     * altered.	     */	    tv.tv_sec = cv.sec;	       /* Time to next event */	    tv.tv_usec = cv.usec;	    tvp = &tv;	}	rx_stats.selects++;	FD_COPY(&rx_selectMask, &rfds);	if (lastPollWorked || nextPollTime < clock_Sec()) {	    /* we're catching up, or haven't tried to for a few seconds */	    rx_select = select;	    doingPoll = 1;	    nextPollTime = clock_Sec() + 4;	/* try again in 4 seconds no						 * matter what */	    tv.tv_sec = tv.tv_usec = 0;/* make sure we poll */	    tvp = &tv;	} else {	    rx_select = IOMGR_Select;	    doingPoll = 0;	}	lastPollWorked = 0;	       /* default is that it didn't find				        * anything */	fds = (*rx_select) (FD_SETSIZE, &rfds, 0, 0, tvp);	clock_NewTime();	if (fds > 0) {	    if (doingPoll)		lastPollWorked = 1;	    for(socket = 0; socket < FD_SETSIZE; ++socket) {		if(p == NULL)		    break;		if(FD_ISSET(socket, &rfds) && 		   rxi_ReadPacket(socket, p, &host, &port)) {		    p = rxi_ReceivePacket(p, socket, host, port);		}	    }	}    }    /* NOTREACHED */}