如果我使用close而不是cancel,則會出現一些問題。使用boost :: asio :: ip :: tcp :: socket :: cancel()和socket :: close()
close
函數可以關閉套接字,並且任何未完成的異步操作都會通過返回boost::asio::error::operation_aborted
錯誤而停止。
爲什麼要用cancel
代替close
?
我擔心如果一些異步操作正在執行,cancel
無法取消它,是嗎?
像asio::ip::tcp::resolve::cancel
,我嘗試了很多次調用async_resolve
後取消resolve_handler
,但resolve_handler
始終沒有boost::asio::error::operation_aborted
返回錯誤。
我認爲resolve_handler
正在執行?
是嗎?
但請注意cancel()的註釋也爲*在Windows Vista,Windows Server 2008及更高版本上運行時,始終使用CancelIoEx函數。 * –
感謝你和Sam Miller的幫助,我現在明白了一點,謝謝 –