提升Asio Peek和完成条件

Boost Asio Peek and Completion Condition

本文关键字:条件 Asio Peek 提升      更新时间:2023-10-16

我正在使用Boost Asio来建立套接字连接。我希望在不消耗数据的情况下查看缓冲区中的数据,并且我希望使用完成条件来确保我可以在必要时停止阻塞调用。

我可以从basic_stream_socket::receive:

获得peek功能
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。但是,此调用将阻塞,直到至少读取一个字节或发生错误。我可以从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);

我可以提供一个completion_condition方法来检查调用是否应该在继续之前中止。

我的问题是这样的:是否有一种方法来获得一个message_flags参数和一个completion_condition参数在同一方法调用?

我想在不消耗它的情况下偷看缓冲区中的数据,我想用一个完成条件来确保我可以必要时停止阻塞调用

不要这样做。使用异步方法,如async_read()async_write()

使用cancel()命令停止未完成的异步操作。