2013-03-13 37 views
2

Boost :: ASIO有沒有辦法知道async_read_some在特定的時間段內是否不返回而不關閉套接字來調用一個函數?如果沒有更多數據要傳輸到緩衝區,通常不會返回async_read_some()async_read_some return

_socket->async_read_some(
    boost::asio::buffer(this->reply, sizeof(this>reply)), 
    boost::bind(
     &TCP_IP_Connection::dataProcess, 
     this, 
     boost::asio::placeholders::error, 
     boost::asio::placeholders::bytes_transferred 
    ) 
); 
+3

它可以使用計時器來完成。花時間閱讀官方提供的Boost.Asio示例[這裏](http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/timeouts/blocking_tcp_client.cpp )和[這裏](http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/timeouts/async_tcp_client.cpp)以更好地理解該方法。 – 2013-03-13 12:48:37

+0

謝謝,但我不想關閉連接。 – 2013-03-13 12:56:59

+1

然後不要調用'socket :: close()'? _approach_就是例子。 – 2013-03-13 13:02:59

回答

0

async_read_some總是立即返回。

如果你在談論處理函數(回調函數),如果你在返回之前關閉了套接字,那麼我認爲處理函數被調用asio::error::operation_aborted。如果你處理這種情況,那麼也許你不需要擔心如果你連接或不連接。