Currently iohandler.c and asyn.c has a lot in common, except that iohandler is hooked into main_loop_wait(), with qemu_iohandler_fill(). Likewise for slirp.
It is much cleaner to drive slirp fds with iohandler, and implement iohandler with an AioContext. This series does these two things. It applies to Stefan's net-next tree which has the prerequisite that removes the obstacle "qemu_set_fd_handler2" for this convergence: http://comments.gmane.org/gmane.comp.emulators.qemu/341526 Upon that this series makes a more consistent main loop structure, and will also benefits future work on event loop, such as introducing of epoll and possibly in the long run moving things to separate iothread (whose event loop is based on AioContext too). Fam Zheng (9): aio: Introduce aio_set_fd_handler_pri iohandler: Use aio code main-loop: Move include of "qemu/sockets.h" to libslirp.h slirp: Remove dead code for "PROBE_CONN" slirp: Add "poll_events" to struct socket slirp: Move icmp socket to iohandler slirp: Move udb socket to iohandler slirp: Move tcb socket to iohandler slirp: Remove unused pollfds from the parameter list aio-posix.c | 19 ++ aio-win32.c | 10 + include/block/aio.h | 8 + include/qemu/main-loop.h | 10 +- iohandler.c | 124 +++-------- main-loop.c | 10 +- slirp/libslirp.h | 5 +- slirp/slirp.c | 528 +++++++++++++++++++---------------------------- slirp/slirp_config.h | 4 - slirp/socket.h | 1 + stubs/slirp.c | 4 +- 11 files changed, 300 insertions(+), 423 deletions(-) -- 2.4.2