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_future
、use_awaitable
、yield_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