我正在使用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参数?
答案 0 :(得分:1)
我想在不消耗它的情况下查看缓冲区中的数据, 我想用完成条件来确保我能 如有必要,请停止阻止通话。
不要这样做。使用async_read()
和async_write()
等异步方法。要停止未完成的异步操作,请使用cancel()
。