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)