В чем разница между asio:: tcp:: socket async_read_some и async_receive?
В чем разница между:
-
boost::asio::tcp::socket::async_read_some()
-
boost::asio::tcp::socket::async_receive()
Насколько я могу судить, их документация идентична.
Что я должен предпочесть?
Ответы
Ответ 1
Их спецификация в сетевом предложении TR2 (5.7.10.2 элемента basic_stream_socket) тоже идентична:
В async_receive:
Эффекты: вызывается this- > service.async_receive (this- > реализация, буферы, 0, обработчик).
В async_read_some:
Эффекты: вызывается this- > service.async_receive (this- > реализация, буферы, 0, обработчик).
Итак, я думаю, это подтверждает впечатление Джерри.
Ответ 2
Я считаю, что они по сути идентичны. Причина, по которой они обеспечивают оба, заключается в предоставлении интерфейсов, подобных как iostreams (которые имеют член read_some
), так и сокеты (которые имеют receive
).
Как указал Питер Ценг, async_receive
также имеет перегрузку, которая принимает socket_base::message_flags
, которая async_read_some
не делает.
Ответ 3
Подтверждение всех здесь двумя ссылками:
Код точно такой же. Однако async_receive
имеет одну перегрузку с message_flags, что особенно позволяет указать asio::socket_base::message_peek
.