Boost Asio Peek и условия завершения - PullRequest
0 голосов
/ 07 сентября 2011

Я использую 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);

Один из возможных флагов сообщения: basic_stream_socket :: message_peek .Однако этот вызов блокируется до тех пор, пока не будет прочитан хотя бы один байт или не произойдет ошибка.Я могу получить функциональность условия завершения из read :

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 и параметр complete_condition в одном и том же вызове метода?

1 Ответ

1 голос
/ 08 сентября 2011

Я хотел бы посмотреть на данные в буфере, не используя их, и я хотел бы использовать условие завершения, чтобы гарантировать, что я могу остановить блокирующий вызов в случае необходимости.

Не делай этого.Используйте асинхронные методы, такие как async_read() и async_write().Чтобы остановить незавершенные асинхронные операции, используйте cancel().

...