问题标签 [asio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Boost Asio 无法正确读取
在我的代码中,我设置了一个客户端和服务器套接字,以使用 asio 模拟两者之间的交互。不幸的是,我的 read() 出现了一些问题,我不完全确定我没有正确传递什么以及为什么。当我运行它时,它会无限期地等待。可能是我缺少的东西吗?
编辑:添加了处理程序,它们只是记录信息,所以我省略了它们的定义。
c++ - 在 CLion 中链接 Boost.Asio 时出现 Static_initialization_and_distruction 错误
我正在接近这组库,因为我需要为我的大学考试创建一个个人项目,并且我想做一些具有网络功能的事情。我已经有一本关于这个特定库的书,但现在我无法在我的项目中链接它(我的书只解释了如何在 linux 上将它与 GCC 链接,但我正在 Windows 10 上将 CLion 与 MinGW 结合起来)。当我像这样编译一个简单的空项目时:
我得到了这个令人印象深刻的错误:
这是我的 CMakeLists.txt
我该如何解决这个问题?提前致谢!
编辑
我更新了我的 CMakeLists.txt,如下所示:
现在我没有收到任何错误,无论如何,当我告诉我的程序时:
升压变红,静态分析器告诉我“找不到升压”。现在问题出在哪里?谢谢!
c++ - boost:asio::read 或 boost:asio::async_read 超时
是的。我知道time_out
在boost::asio
. 我的问题可能太简单了,asio
伙计们无法在这里解决。
我正在使用boost::asio
TCP 协议以尽可能快的速度通过网络连续读取数据。
在while 循环中ReadData()
从工作人员连续调用以下函数。std::thread
它工作正常。返回数据。一切都很好。
我想要的只是为boost::asio::read
. 我了解到我需要使用boost::asio::async_read
withboost::asio::async_wait
才能使 time_out 技术起作用。
一个提升示例建议使用boost::asio::async_read_until
?
我应该使用boost::asio::async_read
orboost::asio::async_read_until
吗?
我是否使用boost::asio::async_read
orboost::asio::async_read_until
或都没有关系boost::asio::read
。但是我希望在asio::read
对我的方法的调用中触发并完成调用,ReadData
这样客户端代码就不会受到影响。
我怎样才能做到这一点?请建议
c++ - Boost Socket Async_Connect 访问冲突
下面是一个在运行时引发访问冲突的小片段。我正在使用 Visual Studio 2015 和 boost 1.60.0 以及调用时
升压文件“socket_ops.ipp”中发生访问冲突
异常是“ConsoleApplication4.exe 中 0x000007FEFD598A2F (KernelBase.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF。”
}
c++ - 如何在 Boost Asio 上组合链包装器和优先级包装器
我想同时使用 Boost.Asio 的链和优先包装器。
在编写代码之前,我已经阅读了以下信息:
http://thread.gmane.org/gmane.comp.lib.boost.asio.user/3531
为什么在使用 boost::asio 时每个连接都需要 strand?
我想使用包装器方法,因为我想使用各种异步 API,例如 async_read、async_write 和 async_connect。根据http://thread.gmane.org/gmane.comp.lib.boost.asio.user/3531,似乎可以组合优先级包装器和链包装器。
所以我根据下面的例子写了代码:
这是我的代码:
包装器由以下宏启用:
启用两个宏后,我得到以下结果:
我希望我得到
输出为
但我没明白。
似乎在函数execute()
中,function_()
被调用但wrapped_handler::operator()
未被调用。(在我的代码execute()
中调用了该函数。)pq.execute_all();
function_()
我在调用之后跟踪了序列。
调用以下函数:
https://github.com/boostorg/asio/blob/boost-1.63.0/include/boost/asio/detail/wrapped_handler.hpp#L191 https://github.com/boostorg/asio/blob/boost-1.63 .0/include/boost/asio/detail/wrapped_handler.hpp#L76 https://github.com/boostorg/asio/blob/boost-1.63.0/include/boost/asio/strand.hpp#L158 https:// /github.com/boostorg/asio/blob/boost-1.63.0/include/boost/asio/detail/impl/strand_service.hpp#L55 https://github.com/boostorg/asio/blob/boost-1.63。 0/include/boost/asio/detail/impl/strand_service.ipp#L94
然后在函数bool strand_service::do_dispatch(implementation_type& impl, operation* op)
中,操作op
没有被调用,而是被推入队列中,如下一行:
我不确定为什么将function_()
其发送到 strand_service。我认为在我的代码中的以下点已经解开了绞线包装器:
如果我只启用优先级包装器,我会得到以下结果。似乎按我的预期工作。
如果我只启用了 strand wrapper,我会得到以下结果。似乎也像我预期的那样工作。
有任何想法吗?
c++ - 如何使用 boost asio 每十秒进行一次 async_connect?
我想使用 boost asio 创建一个 tcp 客户端,并每隔十秒 async_connect 到一个服务器,直到成功。你给我一个例子吗?谢谢。
c++ - 想知道为什么我不能只为协程捕获 asio::handler_type 的引用
我正在使用协程玩 asio,并想测试如何调用异步函数。我有以下代码:
奇怪的是,如果我将 &handler 放在捕获列表中,执行流程将会混乱,然后会遇到分段错误。但是如果我使用“处理程序”代替它运行没有任何问题(那么我当然需要在 lambda 中的副本)。
搜索了一圈,找不到任何相关的东西。提前感谢您的帮助。
c++ - 如何使用 boost asio 连接到 elasticsearch?
我正在尝试编写一个 C++ 片段来对弹性搜索服务器进行 POST。服务器在 ip 172.20.1.160 上运行,我可以使用 curl 输入数据,就像在 Elasticsearch 教程中一样:
{“用户”:“kimchy”,“post_date”:“2009-11-15T14:12:12”,“消息”:“试用 Elasticsearch”}'
但是当我尝试用 boost ASIO 做类似的事情时,我的连接显然被拒绝了。
这是显示我如何尝试创建连接以及产生错误的最小可编译代码:
值得一提的是,我还在同一台机器上运行了一个碳石墨服务器,我可以通过纯文本协议在那里连接和发送数据,但是我无法与 elasticsearch 建立套接字连接,我得到了异常:
有人能告诉我我需要知道什么才能让这个工作吗?
c++ - boost::asio io_service thread pool with io_service::work
I have a boost::asio threadpool, which has a asio::io_service
and asio::work
:
boost::asio::io_service m_service;
boost::asio::io_service::work m_work;
In the threadpool destructor, I am calling m_service.stop()
and then joining all the threads. However running into this crash intermittently during process shutdown (in the threadpool destructor):
The asio documentation suggests to explicitly destroy the asio::work
object for all handlers to finish normally. Questions:
- Is it required to call
io_service::stop()
after explicitly destructing the asio::work object? - What is the difference between
io_service::stop()
and destroyingio_service::work
- Does this threadpool destructor look right, can it help fix the above crash. I have changed m_work to a pointer
std::unique_ptr<boost::asio::io_service::work> m_work;
:
~threadpool()
{
m_work.reset(); // Allow io_service::run to exit
// join all threads
}
c++ - 在 ASIO 中对 UDP 调用 receive_from 应用超时
我有以下一点 ASIO 代码,它同步读取 UDP 数据包。问题是,如果在给定的时间范围(30 秒)内没有给定大小的数据包到达,我希望 recieve_from 函数返回某种错误以指定超时。
查看文档,非面向 UDP 的调用支持超时机制。
在 ASIO 中同步 UDP 调用超时的正确方法是什么(如果可能,也可以移植)?