inline int mypoll(MYPOLLFD *fds, unsigned int nfds, Timeout timeout){ fd_set readfd; FD_ZERO(&readfd); fd_set writefd; FD_ZERO(&writefd); fd_set oobfd; FD_ZERO(&oobfd); SOCKET maxfd = 0; for (unsigned int i = 0; i < nfds; i++) { if (fds[i].events & POLLIN) { FD_SET(fds[i].fd, &readfd); } if (fds[i].events & POLLOUT) { FD_SET(fds[i].fd, &writefd); } if (fds[i].events & POLLPRI) { FD_SET(fds[i].fd, &oobfd); } fds[i].revents = 0; if (fds[i].fd > maxfd) { maxfd = fds[i].fd; } } struct timeval tv; tv.tv_sec = timeout.getSeconds(); tv.tv_usec = timeout.getMilliseconds() - (timeout.getSeconds() * 1000); int num = select(((int)(maxfd)) + 1, &readfd, &writefd, &oobfd, &tv); if (num < 1) { return num; } for (unsigned int i = 0; i < nfds; i++) { if (FD_ISSET(fds[i].fd, &readfd)) { fds[i].revents |= POLLIN; } if (FD_ISSET(fds[i].fd, &writefd)) { fds[i].revents |= POLLOUT; } if (FD_ISSET(fds[i].fd, &oobfd)) { fds[i].revents |= POLLPRI; } } return num; }