问题标签 [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.

0 投票
1 回答
538 浏览

c++ - Boost Asio 无法正确读取

在我的代码中,我设置了一个客户端和服务器套接字,以使用 asio 模拟两者之间的交互。不幸的是,我的 read() 出现了一些问题,我不完全确定我没有正确传递什么以及为什么。当我运行它时,它会无限期地等待。可能是我缺少的东西吗?

编辑:添加了处理程序,它们只是记录信息,所以我省略了它们的定义。

0 投票
1 回答
226 浏览

c++ - 在 CLion 中链接 Boost.Asio 时出现 Static_initialization_and_distruction 错误

我正在接近这组库,因为我需要为我的大学考试创建一个个人项目,并且我想做一些具有网络功能的事情。我已经有一本关于这个特定库的书,但现在我无法在我的项目中链接它(我的书只解释了如何在 linux 上将它与 GCC 链接,但我正在 Windows 10 上将 CLion 与 MinGW 结合起来)。当我像这样编译一个简单的空项目时:

我得到了这个令人印象深刻的错误:

这是我的 CMakeLists.txt

我该如何解决这个问题?提前致谢!

编辑

我更新了我的 CMakeLists.txt,如下所示:

现在我没有收到任何错误,无论如何,当我告诉我的程序时:

升压变红,静态分析器告诉我“找不到升压”。现在问题出在哪里?谢谢!

0 投票
1 回答
2970 浏览

c++ - boost:asio::read 或 boost:asio::async_read 超时

是的。我知道time_outboost::asio. 我的问题可能太简单了,asio伙计们无法在这里解决。

我正在使用boost::asioTCP 协议以尽可能快的速度通过网络连续读取数据。

在while 循环中ReadData()从工作人员连续调用以下函数。std::thread

它工作正常。返回数据。一切都很好。

我想要只是boost::asio::read. 我了解到我需要使用boost::asio::async_readwithboost::asio::async_wait才能使 time_out 技术起作用。

一个提升示例建议使用boost::asio::async_read_until?

我应该使用boost::asio::async_readorboost::asio::async_read_until吗?

我是否使用boost::asio::async_readorboost::asio::async_read_until或都没有关系boost::asio::read。但是我希望在asio::read对我的方法的调用中触发并完成调用,ReadData这样客户端代码就不会受到影响。

我怎样才能做到这一点?请建议

0 投票
1 回答
455 浏览

c++ - Boost Socket Async_Connect 访问冲突

下面是一个在运行时引发访问冲突的小片段。我正在使用 Visual Studio 2015 和 boost 1.60.0 以及调用时

升压文件“socket_ops.ipp”中发生访问冲突

异常是“ConsoleApplication4.exe 中 0x000007FEFD598A2F (KernelBase.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF。”

}

0 投票
1 回答
505 浏览

c++ - 如何在 Boost Asio 上组合链包装器和优先级包装器

我想同时使用 Boost.Asio 的链和优先包装器。

在编写代码之前,我已经阅读了以下信息:

提高 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,似乎可以组合优先级包装器和链包装器。

所以我根据下面的例子写了代码:

http://www.boost.org/doc/libs/1_63_0/doc/html/boost_asio/example/cpp03/invocation/prioritised_handlers.cpp

这是我的代码:

包装器由以下宏启用:

启用两个宏后,我得到以下结果:

我希望我得到

输出为

但我没明白。

似乎在函数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没有被调用,而是被推入队列中,如下一行:

https://github.com/boostorg/asio/blob/boost-1.63.0/include/boost/asio/detail/impl/strand_service.ipp#L111

我不确定为什么将function_()其发送到 strand_service。我认为在我的代码中的以下点已经解开了绞线包装器:

如果我只启用优先级包装器,我会得到以下结果。似乎按我的预期工作。

如果我只启用了 strand wrapper,我会得到以下结果。似乎也像我预期的那样工作。

有任何想法吗?

0 投票
1 回答
177 浏览

c++ - 如何使用 boost asio 每十秒进行一次 async_connect?

我想使用 boost asio 创建一个 tcp 客户端,并每隔十秒 async_connect 到一个服务器,直到成功。你给我一个例子吗?谢谢。

0 投票
1 回答
133 浏览

c++ - 想知道为什么我不能只为协程捕获 asio::handler_type 的引用

我正在使用协程玩 asio,并想测试如何调用异步函数。我有以下代码:

奇怪的是,如果我将 &handler 放在捕获列表中,执行流程将会混乱,然后会遇到分段错误。但是如果我使用“处理程序”代替它运行没有任何问题(那么我当然需要在 lambda 中的副本)。

搜索了一圈,找不到任何相关的东西。提前感谢您的帮助。

0 投票
1 回答
241 浏览

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 建立套接字连接,我得到了异常:

有人能告诉我我需要知道什么才能让这个工作吗?

0 投票
1 回答
578 浏览

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):

#xA;

The asio documentation suggests to explicitly destroy the asio::work object for all handlers to finish normally. Questions:

  1. Is it required to call io_service::stop() after explicitly destructing the asio::work object?
  2. What is the difference between io_service::stop() and destroying io_service::work
  3. 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
    }
0 投票
1 回答
804 浏览

c++ - 在 ASIO 中对 UDP 调用 receive_from 应用超时

我有以下一点 ASIO 代码,它同步读取 UDP 数据包。问题是,如果在给定的时间范围(30 秒)内没有给定大小的数据包到达,我希望 recieve_from 函数返回某种错误以指定超时。

查看文档,非面向 UDP 的调用支持超时机制。

在 ASIO 中同步 UDP 调用超时的正确方法是什么(如果可能,也可以移植)?