19 fd_set *read_fds, fd_set *write_fds, fd_set *except_fds)
27 for (nfds_t i = 0; i < nfds; i++) {
28 if (fds[i].fd >= FD_SETSIZE) {
37 FD_SET(fds[i].fd, read_fds);
40 FD_SET(fds[i].fd, write_fds);
43 FD_SET(fds[i].fd, except_fds);
46 max_fd = qMax(max_fd, fds[i].fd);
80 fd_set *read_fds, fd_set *write_fds, fd_set *except_fds)
84 for (nfds_t i = 0; i < nfds; i++) {
88 if (FD_ISSET(fds[i].fd, read_fds))
91 if (FD_ISSET(fds[i].fd, write_fds))
94 if (FD_ISSET(fds[i].fd, except_fds))
97 if (fds[i].revents != 0)
136int qt_poll(
struct pollfd *fds, nfds_t nfds,
const struct timespec *timeout_ts)
143 fd_set read_fds, write_fds, except_fds;
144 struct timeval tv, *ptv =
nullptr;
153 for (nfds_t i = 0; i < nfds; i++) {
159 if (fds[i].fd > FD_SETSIZE) {
171 fds[i].revents = POLLNVAL;
177 const int max_fd = qt_poll_prepare(fds, nfds, &read_fds, &write_fds, &except_fds);
188 const int ret = ::select(max_fd, &read_fds, &write_fds, &except_fds, ptv);
194 return qt_poll_sweep(fds, nfds, &read_fds, &write_fds, &except_fds);
200 n_bad_fds += qt_poll_mark_bad_fds(fds, nfds);
static int qt_poll_prepare(struct pollfd *fds, nfds_t nfds, fd_set *read_fds, fd_set *write_fds, fd_set *except_fds)
static int qt_poll_sweep(struct pollfd *fds, nfds_t nfds, fd_set *read_fds, fd_set *write_fds, fd_set *except_fds)