static void fill_fd_dir(int fildes, DIR *fp, int flags, const FILINFO *fno) { struct fd *pfd; pfd = file_struct_get(fildes); fill_fd(pfd, flags, fno); pfd->opaque = fp; }
int check_select(Uint32 timeout) { SOCKET maxfd; int retval; struct timeval tv; struct timeval before; struct timeval left; fd_set maskr; fd_set maskw; int done; check_dead(); FD_ZERO(&maskr); FD_ZERO(&maskw); maxfd = fill_fd(&maskr, &maskw); tv.tv_sec = timeout / 1000; tv.tv_usec = (timeout % 1000) * 1000; done = 0; while (!done) { cnt->select_recv = 0; gettimeofday(&before, NULL); retval = select((int)maxfd + 1, &maskr, &maskw, NULL, &tv); done = 0; if (retval > 0 && check_clients(&maskr, &maskw, &retval)) done += 1; if (retval > 0 && check_server(&maskr, &maskw, &retval)) done += 8; if (retval) { if (retval < 0 && errno != EINTR) fprintf(stderr, "select: %s", strerror(errno)); else fprintf(stderr, "select: on m'aurait mentit (reste:%d) ?\n", retval); exit(-1); } check_dead(); if (!timeout) return (done); gettimeofday(&left, NULL); left.tv_sec -= before.tv_sec; left.tv_usec -= before.tv_usec; if (cnt->select_recv && left.tv_sec < tv.tv_sec && left.tv_usec < tv.tv_usec) { done = 0; memcpy(&tv, &left, sizeof(left)); } } return (done); }