
在program中,至少需要有一个 I/0 execution context,如boost::asio::io_context, boost::asio::thread_pool, or boost::asio::system_context
该boost::asio::io_context表明已经连接到了
操作系统的 I/O services上。
1
boost::asio::io_context io_context;
program进行I/O操作,必须有一个 I/O object 如 TCP socket:
1
boost::asio::ip::tcp::socket socket(io_context);
同步连接操作相关事件#
进行同步连接操作是,如下事件按顺序触发 1. 通过调用
I/O object,进行初始化连接
1
socket.connect(server_endpoint);
1
2boost::system::error_code ec;
socket.connect(server_endpoint, ec);
异步连接操作相关事件#

通过调用 I/O object,进行初始化连接
其中 **_completion_handler** 是一个带有签名(signature)的函数 or 函数对象1
socket.async_connect(server_endpoint, your_completion_handler);
这个签名(signature) 取决于正在进行的 异步操作。1
void your_completion_handler(const boost::system::error_code& ec);
I/O object 请求 I/O execution context。
I/O execution context 给操作系统发signals,通知操作系统进行异步连接。
操作系统完成连接操作后,将结果加入到队列,等待I/O execution context处理。
当使用 io_context 作为 I/O execution context时, 需要运行io_context::run(),获取返回的结果。当有未完成的异步操作时,不能运行 io_context::run()。因此需要在首次进行异步连接操作时,就运行io_context::run()。
在 io_context::run() 里,I/O execution context 将处理队列中的返回结果,将其翻译成 error_code,然后传给 completion handler(回调)

reference#
- (Basic Boost.Asio Anatomy)[https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/overview/core/basics.html]