异步读写 TCP 套接字的实现与优化
1. 异步写入操作
异步写入操作的启动和回调调用循环会一直重复,直到缓冲区中的所有数据都写入套接字或发生错误。当回调函数返回且未启动新的异步操作时, asio::io_service::run()
方法会解除线程阻塞并返回,应用程序随之退出。
虽然 async_write_some()
方法可以异步地将数据写入套接字,但基于它的解决方案较为复杂且容易出错。而 asio::async_write()
函数提供了更便捷的方式。以下是它的一个重载形式:
template<
typename AsyncWriteStream,
typename ConstBufferSequence,
typename WriteHandler>
void async_write(
AsyncWriteStream & s,
const ConstBufferSequence & buffers,
WriteHandler handler);
- 参数说明 :
- 第一个参数是满足
AsyncWriteStream
概念要求的对象,asio::ip::tcp::socket
类的对象满足这些要求,可用于此函数。 - 第二和第三个参数分别是
- 第一个参数是满足