加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用boost :: asio :: ip :: tcp :: socket :: cancel()和s

发布时间:2020-12-16 10:19:26 所属栏目:百科 来源:网络整理
导读:如果我使用close而不取消,则存在一些问题. close函数可以关闭套接字,并通过返回boost :: asio :: error :: operation_aborted错误来停止任何未完成的异步操作. 我为什么要使用取消而不是关闭? 我担心如果某些异步操作正在执行,取消无法取消它,是吗? 像asio
如果我使用close而不取消,则存在一些问题.

close函数可以关闭套接字,并通过返回boost :: asio :: error :: operation_aborted错误来停止任何未完成的异步操作.

我为什么要使用取消而不是关闭?

我担心如果某些异步操作正在执行,取消无法取消它,是吗?

像asio :: ip :: tcp :: resolve :: cancel,我在调用async_resolve后尝试多次取消resolve_handler,但是resolve_handler总是返回而没有boost :: asio :: error :: operation_aborted错误.

我认为resolve_handler正在执行?

是?

解决方法

如果要在不关闭套接字的情况下停止挂起操作,则取消非常有用.

请注意,Boost documentation建议使用close以获得更高的可移植性(来自doc页面):


For portable cancellation,consider
using one of the following
alternatives:

  • Disable asio’s I/O completion port
    backend by defining
    BOOST_ASIO_DISABLE_IOCP.
  • Use the close() function to simultaneously cancel the outstanding operations and close the socket.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读