void worker::do_accept(tcp::acceptor& acceptor, server& srv) { while (acceptor.is_open()) { bs::error_code ec; // get an io service to use for a new client, we pick them via round robin auto& worker = srv.impl()->get_worker(); auto& iosvc = worker.io_service(); auto new_session = std::make_shared<session>(srv, iosvc); acceptor.async_accept(new_session->socket(), bfa::yield[ec]); if (!ec) { worker.add_session(new_session); worker.m_new_session_cv.notify_one(); } } }