Повышаю. Asio может использоваться для выполнения как синхронных, так и асинхронных операций на объектах ввода/вывода, таких как розетки. Перед использованием Boost. Asio может быть полезно получить концептуальную картину различных частей Boost. Асио, твоя программа и как они работают вместе.
В качестве вводного примера рассмотрим, что происходит при выполнении операции подключения на розетке. Начнем с изучения синхронных операций.

Ваша программабудет иметь по крайней мере одинio_serviceобъект.io_serviceпредставляетВаша программаСсылка на операционную системуУслуги ввода/вывода.
boost::asio::io_service io_service;
Для выполнения операций ввода/выводавашей программепотребуется.Объект ввода/вывода, такой как гнездо TCP:
boost::asio::ip::tcp::socket socket(io_service);
При выполнении синхронной операции соединения происходит следующая последовательность событий:
1.Ваша программаинициирует операцию соединения, позвонивОбъект ввода/вывода:
socket.connect(server_endpoint);
2.объект ввода/выводанаправляет запрос вio_service.
3.io_serviceпризывает операционную системувыполнить операцию подключения.
4. Операционная системавозвращает результат операции вio_service.
5.io_serviceпереводит любую ошибку, возникшую в результате операции, в объект типа<boost::system::error_code
>.<error_code
>может быть сопоставлен с конкретными значениями или протестирован как булевой (где результат<false
>означает, что ошибки не произошло). Затем результат переносится обратно в.Объект ввода/вывода.
6.Объект ввода/выводавыбрасывает исключение типа<boost::system::system_error
>, если операция не удалась. Если код для запуска операции был написан как:
boost::system::error_code ec;
socket.connect(server_endpoint, ec);
Тогда<error_code
>переменная<ec
>будет установлена на результат операции, и никаких исключений не будет.
При использовании асинхронной операции происходит иная последовательность событий.

1.Ваша программаинициирует операцию соединения, позвонивОбъект ввода/вывода:
socket.async_connect(server_endpoint, your_completion_handler);
где<your_completion_handler
>- функция или объект функции с подписью:
void your_completion_handler(const boost::system::error_code& ec);
Точная требуемая подпись зависит от выполняемой асинхронной операции. Справочная документация указывает соответствующую форму для каждой операции.
2.объект ввода/выводанаправляет запрос вio_service.
3.io_serviceсигнализирует операционной системе, что она должна начать асинхронное соединение.
Время идет. (В синхронном случае это ожидание было бы полностью включено в продолжительность операции соединения.)

4. Операционная системауказывает, что операция подключения завершена путем размещения результата в очереди, готовой к тому, чтобы быть подобранной службойio_service.
5.Ваша программадолжна сделать вызов<io_service::run()
>(или одной из аналогичныхфункций члена io_service), чтобы получить результат. Звонок в<io_service::run()
>блоков, пока есть незавершенные асинхронные операции, поэтому вы обычно звоните, как только начинаете свою первую асинхронную операцию.
6.В то время как внутри вызова к<io_service::run()
>,io_serviceвыстраивает очередь из результата операции, переводит его в<error_code
>, а затем передает еговашему обработчику завершения.
Это упрощенная картина того, как наращивать. Азио работает. Вы захотите углубиться в документацию, если ваши потребности более продвинуты, например, расширение Boost. Asio выполняет другие виды асинхронных операций.