diff options
-rw-r--r-- | io_muxer.c | 17 | ||||
-rw-r--r-- | io_muxer.h | 2 |
2 files changed, 10 insertions, 9 deletions
@@ -84,15 +84,16 @@ int IoMuxer_OnWrite(struct IoMuxer* io_muxer, int fd, return 0; } -int IoMuxer_Iterate(struct IoMuxer* io_muxer) { - CompressRecords(io_muxer); - int result = poll(io_muxer->pfds, io_muxer->size, -1); - if (result <= 0) return -1; - for (size_t i = 0; i < io_muxer->size; i++) { - if (io_muxer->pfds[i].revents) - io_muxer->closures[i].callback(io_muxer->closures[i].user); +int IoMuxer_Iterate(struct IoMuxer* io_muxer, int timeout) { + for (;;) { + CompressRecords(io_muxer); + int result = poll(io_muxer->pfds, io_muxer->size, timeout); + if (result <= 0) return result; + for (size_t i = 0; i < io_muxer->size; i++) { + if (io_muxer->pfds[i].revents) + io_muxer->closures[i].callback(io_muxer->closures[i].user); + } } - return 0; } void IoMuxer_Destroy(struct IoMuxer* io_muxer) { @@ -39,7 +39,7 @@ int IoMuxer_OnRead(struct IoMuxer* io_muxer, int fd, void (*read_callback)(void*), void* user); int IoMuxer_OnWrite(struct IoMuxer* io_muxer, int fd, void (*write_callback)(void*), void* user); -int IoMuxer_Iterate(struct IoMuxer* io_muxer); +int IoMuxer_Iterate(struct IoMuxer* io_muxer, int timeout); void IoMuxer_Destroy(struct IoMuxer* io_muxer); #ifdef __cplusplus |