提升Asio Peek和完成条件

时间:2011-09-07 16:21:14

标签: c++ sockets boost boost-asio

我正在使用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。但是,此调用将阻塞,直到读取至少一个字节或发生错误。我可以从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参数?

1 个答案:

答案 0 :(得分:1)

  

我想在不消耗它的情况下查看缓冲区中的数据,   我想用完成条件来确保我能   如有必要,请停止阻止通话。

不要这样做。使用async_read()async_write()等异步方法。要停止未完成的异步操作,请使用cancel()