Waits for activity on a group of channels. 
   80{
   81#ifdef __linux__
   82    return select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, tvp);
   83#else
   84    int save_errno = 0;
   85    if (tvp) {
   86        struct timeval tv, tvstart, tvend, tvlen;
   87        int res;
   88 
   89        tv = *tvp;
   90        gettimeofday(&tvstart, 
NULL);
 
   91        res = select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, tvp);
   93        gettimeofday(&tvend, 
NULL);
 
   96        if (tvp->tv_sec < 0 || (tvp->tv_sec == 0 && tvp->tv_usec < 0)) {
   97            tvp->tv_sec = 0;
   98            tvp->tv_usec = 0;
   99        }
  101        return res;
  102    }
  103    else
  104        return select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, 
NULL);
 
  105#endif
  106}
void timersub(struct timeval *tvend, struct timeval *tvstart, struct timeval *tvdiff)