2011-09-07 80 views
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參數?

+1

爲什麼不使用異步操作,那麼您不必擔心 - 不會有呼叫被阻塞,並且在有數據時會通知您。 – Nim

+0

如果需要,我仍然會遇到無法停止掛起操作的問題。我可以做一個異步操作,如果它既能夠窺視也可以提供完成條件,但是如果我使用異步方法(如async_receive),我不確定如何取消操作(如有必要)。 – Brian

+0

對於給定的套接字,您可以取消未完成的異步操作。 – Nim

回答

1

我想在緩衝區中的數據來偷看不消耗它, ,我想用一個完成狀態,以確保我能 如果必要的話停止阻塞調用。

不要這樣做。使用異步方法,如async_read()async_write()。要停止未完成的異步操作,請使用cancel()