所以我們做這樣的事情就是這樣的socket.read_some(boost::asio::buffer(buffer, buffer_size));
但是如何讓它在一段時間內沒有開始讀取的情況下拋出一個豁免長於333秒呢?Boost :: asio socket - 如何使read_some在「timeout」中拋出?
4
A
回答
3
您應該考慮使用async_read_some
而不是read_some
,因爲它允許您在讀取的同時啓動新的後臺計時器。然後,爲每個新插槽創建一個新計時器:
boost::asio::io_service io_service;
time_t_timer timer(io_service);
timer.expires_from_now(333);
std::cout << "Starting asynchronous wait\n";
timer.async_wait(&handle_timeout);
io_service.run();
您將在後臺等待兩個異步呼叫。
無論何時您在定時器上收到一些數據,您都可以使用cancel和expires_from_now
來重置倒計時,並且當定時器到期時,您可以關閉套接字或執行其他操作。
相關問題
- 1. 如何使用boost :: asio :: read_some實現超時?
- 2. boost :: asio socket async_ * strand
- 3. 使用boost :: asio :: read_some在TCP/IP中丟棄數據?
- 4. Boost ASIO socket io_service.run blocking
- 5. 修改boost :: asio :: socket :: set_option
- 6. boost :: asio convert socket to secure
- 7. 重新使用ASIO連接,read_some例外
- 8. boost :: asio和socket擁有
- 9. boost :: asio在暫停時拋出異常
- 10. boost read_some函數丟失數據
- 11. 如何使用boost :: asio從網絡中斷中恢復如何使用boost :: asio
- 12. 使用boost :: asio :: ip :: tcp :: socket作爲shared_ptr
- 13. 使用boost :: asio監聽兩個socket
- 14. 如何使用boost :: ASIO
- 15. 從不同線程寫入boost :: asio socket
- 16. boost asio服務器掛起在調用關閉boost :: socket
- 17. 如何從Actionscript 3 tcp socket「read_some」?
- 18. Boost :: Asio讀/寫操作
- 19. unget bytes to boost :: asio :: ip :: tcp :: socket
- 20. 使用boost :: asio :: ip :: tcp :: socket :: cancel()和socket :: close()
- 21. C++ 11線程在訪問boost時崩潰:: asio :: ip :: tcp :: socket
- 22. C++ boost asio tcp socket讀取舊數據
- 23. boost :: asio :: ip :: tcp :: socket中的async_read_some()如何實際工作?
- 24. boost :: asio :: write時出錯
- 25. 回調傳遞給boost :: asio :: async_read_some在boost :: asio :: read_some返回數據時從未調用
- 26. boost :: asio :: ip :: tcp :: socket不會讀取任何東西
- 27. boost :: asio :: async_read和boost :: asio :: streambuf
- 28. 如何使用Boost :: asio :: buffer(buf,size)和boost綁定?
- 29. boost boost :: asio
- 30. Boost :: asio和async_read
666 - 野獸的數量。 668,他的鄰居。 –