fd = bot.connect() fds[fd] = bot epoll.register(fd, EPOLLFLAGS) try: while keep_going: try: results = epoll.poll(config.EPOLL_TIMEOUT) except IOError as e: if e.errno == errno.EINTR and not keep_going: break raise flags = dict(results) ts = time.time() for fd, bot in fds.items(): if flags.get(fd, 0) & select.EPOLLIN == select.EPOLLIN: bot.handle() else: if bot.check_disconnect(ts): del fds[fd] epoll.unregister(fd) fd = bot.connect() fds[fd] = bot epoll.register(fd, EPOLLFLAGS) log.flush() for b in fds.values(): b.disconnect() finally: epoll.close() log.close()