Мне интересно, почему я могу использовать boost :: asio :: io_service без вызова run() для синхронных операций сокета? Например, приведена следующая часть кода:Почему io_service может использоваться без run() для синхронных операций
boost::asio::io_service io_service;
tcp::acceptor a_event_data(io_service, tcp::endpoint(tcp::v4(), port + 2));
// Accept a connection to event socket
socket_ptr sock_event_data(new tcp::socket(io_service));
a_event_data.accept(*sock_event_data);
boost::asio::ip::tcp::endpoint endpoint_event_data = sock_event_data->remote_endpoint();
std::cout << "Accepted a connection for Event Data socket from " << endpoint_event_data.address().to_string() << std::endl;
Но нет вызова для запуска(). В случае асинхронных подключений я должен использовать его. Является ли это фиктивным использованием io_service здесь только для взаимодействия с системой?
По существу, да; но нет ничего, что мешало бы вам смешивать операции async/sync, а базовая структура действительно не знает, в каком режиме вы будете использовать фреймворк в. – Nim