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