簡體   English   中英

用於阻止連接的c ++ boost asio timeout

[英]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票據跟蹤器中進行了長時間的討論

我無法切換到異步操作模式。

鑒於超時要求,我發現這很不可能,發布其余代碼並解釋為什么不能使用異步操作。

當問到這個問題時,我猜ASIO沒有任何關於如何完成所需OP的例子,即超時阻塞操作,例如阻塞套接字操作。 現在有一些示例可以向您展示如何執行此操作。 這個例子似乎很長,但那是因為它得到了很好的評論。 它展示了如何在“一次性”模式中使用ioservice。

我認為這個例子是一個很好的解決方案。 這里的其他解決方案打破了可移植性,並沒有利用ioservice。 如果可移植性不重要且ioservice似乎要花費很多--THEN--你不應該使用ASIO。 無論如何,你都會創建一個ioservice(幾乎所有的ASIO功能都依賴於它,甚至同步套接字),所以,利用它。

阻止呼叫超時的ASIO示例

ASIO文檔已經更新,因此請查看有關如何克服ASIO使用的“陷阱”的新示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM