Go to the documentation of this file. 28 static void _mio_fds_init(mio_priv_t m) \ 31 for(fd = 0; fd < m->maxfd; fd++) \ 33 m->pfds[fd].fd = -1; \ 34 m->fds[fd].mio_fd.fd = fd; \ 39 static mio_fd_t _mio_alloc_fd(mio_priv_t m, int fd) \ 41 m->pfds[fd].fd = fd; \ 42 m->pfds[fd].events = 0; \ 43 if(fd > m->highfd) m->highfd = fd; \ 44 return &m->fds[fd].mio_fd; \ 47 static int _mio_poll(mio_priv_t m, int t) \ 49 return poll(m->pfds, m->highfd + 1, t*1000); \ 55 struct mio_priv_fd_st *fds; \ 59 #define MIO_INIT_VARS(m) \ 61 if((MIO(m)->fds = malloc(sizeof(struct mio_priv_fd_st) * maxfd)) == NULL) \ 63 mio_debug(ZONE,"internal error creating new mio"); \ 67 memset(MIO(m)->fds, 0, sizeof(struct mio_priv_fd_st) * maxfd); \ 69 if((MIO(m)->pfds = malloc(sizeof(struct pollfd) * maxfd)) == NULL) \ 71 mio_debug(ZONE, "internal error creating new mio"); \ 76 memset(MIO(m)->pfds, 0, sizeof(struct pollfd) * maxfd); \ 78 _mio_fds_init(MIO(m)); \ 81 #define MIO_FREE_VARS(m) \ 87 #define MIO_ALLOC_FD(m, rfd) _mio_alloc_fd(MIO(m), rfd) 88 #define MIO_FREE_FD(m, mfd) 90 #define MIO_REMOVE_FD(m, mfd) MIO(m)->pfds[mfd->mio_fd.fd].fd = -1 92 #define MIO_CHECK(m, t) _mio_poll(MIO(m), t) 94 #define MIO_SET_READ(m, mfd) MIO(m)->pfds[mfd->mio_fd.fd].events |= POLLIN 95 #define MIO_SET_WRITE(m, mfd) MIO(m)->pfds[mfd->mio_fd.fd].events |= POLLOUT 97 #define MIO_UNSET_READ(m, mfd) MIO(m)->pfds[mfd->mio_fd.fd].events &= ~POLLIN 98 #define MIO_UNSET_WRITE(m, mfd) MIO(m)->pfds[mfd->mio_fd.fd].events &= ~POLLOUT 101 #define MIO_CAN_READ(m, iter) \ 102 (MIO(m)->pfds[iter].revents & (POLLIN|POLLERR|POLLHUP|POLLNVAL)) 103 #define MIO_CAN_WRITE(m, iter) (MIO(m)->pfds[iter].revents & POLLOUT) 104 #define MIO_CAN_FREE(m) 1 107 #define MIO_INIT_ITERATOR(iter) \ 110 #define MIO_ITERATE_RESULTS(m, retval, iter) \ 111 for(iter = 0; iter <= MIO(m)->highfd; iter++) 113 #define MIO_ITERATOR_FD(m, iter) \ 114 (&MIO(m)->fds[iter].mio_fd)