繁体   English   中英

取消连接为​​boost :: asio

[英]Cancel connection is boost::asio

来自标准SSL客户端示例。 说我调用此函数。

    boost::asio::async_connect(socket_.lowest_layer(), endpoint_iterator,
                               boost::bind(&SSLClient::handle_connect, this,
                                           boost::asio::placeholders::error));

但是随后调用该函数,并且程序正在连接。 我想取消我的请求并停止连接! 我怎样才能做到这一点?

特殊情况:说我在线程中有这些对象。 在这种情况下有办法吗?

现在,如果我尝试执行此操作,则该程序根本不会响应。 我没有办法阻止它停止!

有几种方法可以实现您想要的¹。

  1. 您可以硬停止服务( service.stop() )。 但这使您无法控制所有正在运行的操作。 可以这么说,这是“核”方法。

  2. 受控方式将是调用cancel()

    取消所有与套接字关联的异步操作。

     socket_.cancel() 

现在,您还有另外一个任务,即维护连接对象的生存期(大概是绑定完成处理程序中的this )。 一个非常常用的模式是使连接类从enable_shared_from_this派生, enable_shared_from_this完成处理程序绑定到enable_shared_from_this shared_from_this()而不是this

这样,共享连接对象将在取消上一个未决的异步操作后自动“消失”,而您不必担心泄漏连接对象。

¹缺少exitabortquick_exit exit等:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM