用途:在编写或审查 Boost.Asio / 独立 Asio 的异步 C++ 网络代码时使用,包括 TCP/UDP 服务端与客户端、SSL/TLS 流、定时器、解析器;也用于处理代码能编译但行为异常的情况,如写入交错、缓冲区悬垂、套接字提前关闭,以及把 operation_aborted 误当作错误。
主要能力与用法:先确定实际使用的 Boost 或 Asio 版本与 C++ 标准(查看 find_package(Boost) 输出、dpkg -l libboost-dev、brew info boost、CMAKE_CXX_STANDARD 或直接询问),不要假定为最新版,再按版本挑选风格。Boost ≥1.77 且 C++20 用协程(co_await + awaitable<T>);Boost ≥1.74 且 C++11–17 用完成处理器回调;Boost ≥1.80 且 C++11–17 可用 stackful asio::spawn + yield_context(需链接 Boost.Coroutine,非仅头文件);Boost 1.62–1.65 用经典 io_service / strand.wrap / expires_from_now。SSL/TLS 与 CMake 另有参考。
重点规则:strand 序列化处理器的执行,并不序列化写入,同一 strand 上两个并发的 async_write 仍会交错字节,全双工需每连接一个 strand 加带在途标志的出站队列。asio::buffer() 只是视图,存储必须在操作期间存活。连接必须比其处理器活得更久,使用 enable_shared_from_this 并在每个处理器中捕获 self。分帧用组合读 async_read / async_read_until,不要用可能短读的 async_read_some。始终写 as_tuple(use_awaitable)。async_accept(make_strand(...)) 会使接受的套接字类型变为 strand 版本,不能用 tcp::socket& 绑定。重新布防定时器会以 operation_aborted 结束等待。GCC 的 C++20 风格需 -fcoroutines,仅头文件 Boost 需在一处定义 BOOST_ERROR_CODE_HEADER_ONLY。
限制:该技能不替代针对目标工具链的编译与测试;不覆盖 Boost.Beast(HTTP/WebSocket)、io_uring 后端或 UDP 组播细节;无法确定 Boost 版本与 C++ 标准时应停下来询问。它产生的网络代码接受不可信输入,分配前应校验长度前缀,使用 TLS 时应验证对端证书。官方文档与示例见 Boost.Asio 的 overview、reference、examples 页面。