Начните асинхронную операцию для записи всех предоставленных данных в поток.
template<
typename AsyncWriteStream,
typename ConstBufferSequence,
typename WriteHandler>
void-or-deduced async_write(
AsyncWriteStream & s,
const ConstBufferSequence & buffers,
WriteHandler handler);
Эта функция используется для асинхронного написания определенного количества байтов данных в поток. Функция вызова всегда возвращается немедленно. Асинхронная операция будет продолжаться до тех пор, пока одно из следующих условий не будет правдой:
- Все данные в поставляемых буферах были написаны. То есть передаваемые байты равны сумме размеров буфера.
- Произошла ошибка.
Эта операция реализована с точки зрения нулевых или более вызовов для функции async_write_some потока, и известна как компонированная операция. Программа должна гарантировать, что поток не выполняет никаких других операций записи (таких как async_write, функция async_write_some потока или любые другие сочиненные операции, которые выполняют записи) до завершения этой операции.
- s
Поток, на который должны быть написаны данные. Тип должен поддерживать концепцию AsyncWriteStream.
- buffers
Один или несколько буферов, содержащих данные, подлежащие написанию. Хотя объект буферов может быть скопирован по мере необходимости, владение базовыми блоками памяти сохраняется звонящим, что должно гарантировать, что они остаются в силе до тех пор, пока обработчик не будет назван.
- handler
-
Обработчик должен быть вызван, когда операция записи завершается. Копии будут сделаны из обработчика по мере необходимости. Функция подписи обработчика должна быть:
void handler(
const boost::system::error_code& error,
std::size_t bytes_transferred
);
Независимо от того, завершает ли асинхронная операция немедленно или нет, обработчик не будет ссылаться в рамках этой функции. Призыв обработчика будет выполнен таким образом, как использование boost::asio::io_service::post()
.
Для записи одного буфера данных используйте функцию buffer
следующим образом:
boost::asio::async_write(s, boost::asio::buffer(data, size), handler);
См. buffer
документацию для информации о написании нескольких буферов за один ход, и как использовать ее с массивами, увеличить::array или std::vector.