0
我使用Boost Asio來建立套接字連接。我想窺視緩衝區中的數據而不消耗它,並且我想使用完成條件來確保我可以在必要時停止阻塞調用。Boost Asio Peek和完成條件
我可以從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得到完成條件的功能:
我可以提供檢查該呼叫是否應繼續之前中止一個completion_condition方法。
我的問題是這樣的:有沒有辦法在同一個方法調用中獲取message_flags參數和completion_condition參數?
爲什麼不使用異步操作,那麼您不必擔心 - 不會有呼叫被阻塞,並且在有數據時會通知您。 – Nim
如果需要,我仍然會遇到無法停止掛起操作的問題。我可以做一個異步操作,如果它既能夠窺視也可以提供完成條件,但是如果我使用異步方法(如async_receive),我不確定如何取消操作(如有必要)。 – Brian
對於給定的套接字,您可以取消未完成的異步操作。 – Nim