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(),

Другие вопросы по тегам