[英]c++ boost asio timeout for blocking connect
我有一個C ++ boost客戶端,它執行阻塞連接並在收到響應后處理該消息。 我面臨一個奇怪的問題。
tcp::resolver::query query(tcp::v6(), this->host, port,tcp::resolver::query::v4_mapped);
iterator = resolver.resolve(query);
socket = new tcp::socket(io_service);
socket->connect(*iterator);
我試圖連接到ping6無法訪問的計算機(但啟用了IPV6)。 盡管如此,我在嘗試解決第2行中的查詢時沒有收到任何錯誤。 因此,在發出錯誤之前嘗試連接需要花費太多時間。 我的問題: -
1)是否可以在asio的阻塞連接上超時? 我無法切換到異步操作模式。
2)為什么在解析無法訪問的主機時我沒有收到錯誤?
任何建議都會非常有用
當問到這個問題時,我猜ASIO沒有任何關於如何完成所需OP的例子,即超時阻塞操作,例如阻塞套接字操作。 現在有一些示例可以向您展示如何執行此操作。 這個例子似乎很長,但那是因為它得到了很好的評論。 它展示了如何在“一次性”模式中使用ioservice。
我認為這個例子是一個很好的解決方案。 這里的其他解決方案打破了可移植性,並沒有利用ioservice。 如果可移植性不重要且ioservice似乎要花費很多--THEN--你不應該使用ASIO。 無論如何,你都會創建一個ioservice(幾乎所有的ASIO功能都依賴於它,甚至同步套接字),所以,利用它。
ASIO文檔已經更新,因此請查看有關如何克服ASIO使用的“陷阱”的新示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.