Boost C++ 库

……是世界上评价最高、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu《C++ 编码标准》

basic_stream_socket::async_write_some - Boost C++ 函数库
PrevUpHomeNext

启动异步写入。

template<
    typename ConstBufferSequence,
    typename WriteToken = default_completion_token_t<executor_type>>
DEDUCED async_write_some(
    const ConstBufferSequence & buffers,
    WriteToken && token = default_completion_token_t< executor_type >());

此函数用于异步地将数据写入流套接字。它是 异步操作 的启动函数,并且始终立即返回。

参数

缓冲区

要写入套接字的一个或多个数据缓冲区。虽然缓冲区对象可以根据需要进行复制,但底层内存块的所有权仍由调用者保留,调用者必须确保在调用完成处理程序之前这些内存块保持有效。

标记

将用于生成完成处理程序的 完成令牌,该处理程序将在写入完成时被调用。可能的完成令牌包括 use_futureuse_awaitableyield_context,或者具有正确完成签名的函数对象。完成处理程序的函数签名必须是

void handler(
  const boost::system::error_code& error, // Result of operation.
  std::size_t bytes_transferred // Number of bytes written.
);

无论异步操作是立即完成还是未立即完成,完成处理程序都不会在此函数内部调用。在立即完成时,处理程序的调用将以与使用 async_immediate 相同的方式执行。

完成签名
void(boost::system::error_code, std::size_t)
备注

写入操作可能不会将所有数据传输到对端。如果您需要确保在异步操作完成之前所有数据都已写入,请考虑使用 async_write 函数。

示例

要写入单个数据缓冲区,请使用 buffer 函数,如下所示:

socket.async_write_some(boost::asio::buffer(data, size), handler);

有关一次性写入多个缓冲区的信息,以及如何将其与数组、boost::array 或 std::vector 结合使用,请参阅 buffer 文档。

按操作取消

在 POSIX 或 Windows 操作系统上,此异步操作支持以下 cancellation_type 值的取消:

  • cancellation_type::terminal
  • cancellation_type::partial
  • cancellation_type::total

PrevUpHomeNext