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