Boost Asio Peek и условия завершения
Я использую Boost Asio для настройки сокетного соединения. Я хотел бы посмотреть на данные в буфере, не используя их, и я хотел бы использовать условие завершения, чтобы гарантировать, что я могу остановить блокирующий вызов в случае необходимости.
Я могу получить функциональность взгляда из basic_stream_socket:: receive:
template<
typename MutableBufferSequence>
std::size_t receive(
const MutableBufferSequence & buffers,
socket_base::message_flags flags,
boost::system::error_code & ec);
Один из возможных флагов message_flags - basic_stream_socket:: message_peek. Однако этот вызов блокируется, пока не будет прочитан хотя бы один байт или пока не произойдет ошибка. Я могу получить функциональность условия завершения из чтения:
template<
typename SyncReadStream,
typename MutableBufferSequence,
typename CompletionCondition>
std::size_t read(
SyncReadStream & s,
const MutableBufferSequence & buffers,
CompletionCondition completion_condition,
boost::system::error_code & ec);
Я могу предоставить метод complete_condition, который проверяет, следует ли прервать вызов перед продолжением.
У меня такой вопрос: есть ли способ получить параметр message_flags и параметр extension_condition в одном и том же вызове метода?
1 ответ
Я хотел бы посмотреть на данные в буфере, не используя их, и я хотел бы использовать условие завершения, чтобы гарантировать, что я могу остановить блокирующий вызов в случае необходимости.
Не делай этого. Используйте асинхронные методы, такие как async_read()
а также async_write()
, Чтобы остановить незавершенные асинхронные операции, используйте cancel()
,