首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Beast websocket惯用关闭?

Beast websocket惯用关闭?
EN

Stack Overflow用户
提问于 2019-01-09 17:09:09
回答 1查看 610关注 0票数 1

我有我的C++程序。主线程创建一个仅用于处理websocket的新线程。例如,这个新线程使用boost beast的async_read()调用进行读写。这很像https://www.boost.org/doc/libs/1_69_0/libs/beast/example/websocket/server/async/websocket_server_async.cpp,其中每个异步调用都会引起另一个异步调用。

但是,让主线程告诉websocket线程关闭的惯用方法是什么,因为可能总是有一些未完成的异步读或写调用,比如等待服务器最终发送数据的async_read()空闲调用。关机需要做一些事情,比如取消剩余的async_read(),而不引入某种竞争条件,即在取消之前开始读取。

EN

回答 1

Stack Overflow用户

发布于 2019-01-10 08:13:41

使用boost::asio::post将lambda发布到io_context (如有必要,使用适当的strand ),该a在底层basic_socket上调用cancel。挂起的操作将使用boost::asio::error::operation_aborted立即完成。在完成处理程序中,您可以检查basic_socket::is_open以了解是否应该尝试新的异步调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54106530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档