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