草庐IT

asio-acceptor

全部标签

c++ - 在 boost::asio 中选择功能

我打算在我的项目中使用boost::asio库。但是哪个函数对应于本地套接字C库中的select()并不是很明显。这在asio中可用吗?或者boost是否提供了一种替代方法来确定套接字是否准备就绪? 最佳答案 Boost.Asio的高级设计基于Proactordesingpattern.因此,您不需要轮询select。相反,为异步操作提交完成处理程序,并在操作完成时调用完成处理程序。 关于c++-在boost::asio中选择功能,我们在StackOverflow上找到一个类似的问题:

c++ - 将 future 与 boost::asio 结合使用

有没有人知道使用futuresfromtheBoostthreadlibrary的例子?与BoostASIO?我有一个现有的异步库,它使用回调函数,我想为其提供一个更友好的同步接口(interface)。 最佳答案 如果不了解与现有异步库的交互,很难提供简洁的解决方案。尽管如此,这answer使用Boost.Future和Boost.Asio来实现主动对象模式。当creatingafuture,考虑检查现有的异步库以确定哪种方法更合适:boost::packaged_task提供了一个可以创建future的仿函数。这个仿函数可以在B

c++ - 你如何正确关闭 boost::asio 中的套接字?

我正在努力研究boost::asio中的资源管理。我看到在相应的套接字已经被销毁后调用的回调。boost::asio官方示例就是一个很好的例子:http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/example/cpp11/chat/chat_client.cpp我特别关心关闭方法:voidclose(){io_service_.post([this](){socket_.close();});}如果您调用此函数并随后销毁持有socket_的chat_client实例,则socket_将在对其调用close方法之前被销毁。也

c++ - Boost ASIO 能否用于构建低延迟应用程序?

BoostASIO能否用于构建低延迟应用程序,例如HFT(高频交易)?因此Boost.ASIO使用平台特定的最优解复用机制:IOCP、epoll、kqueue、poll_set、/dev/poll也可以与TOE(TCP/IP卸载引擎)和OpenOnload(内核旁路BSD套接字)一起使用以太网适配器。但是可以使用Boost.ASIO+TOE+OpenOnload构建低延迟应用程序吗? 最佳答案 这是Asio作者的建议,已发布到公开的SG-14GoogleGroup(不幸的是有问题,他们已转移到另一个邮件列表系统):Idoworkon

c++ - Boost::asio、共享内存和进程间通信

我有一个应用程序专门使用boost::asio作为输入数据源,因为我们的大多数对象都是基于网络通信的。由于某些特定要求,我们现在还需要能够使用共享内存作为输入法。我已经编写了共享内存组件,它运行得相当好。问题是如何处理从共享内存进程到消费应用程序的数据可以读取的通知——我们需要处理现有输入线程中的数据(使用boost::asio),我们还需要不阻塞等待数据的输入线程。我通过引入一个中间线程来实现这一点,该线程等待共享内存提供程序进程发出的事件信号,然后将完成处理程序发布到输入线程以处理数据读取。这现在也可以工作,但是中间线程的引入意味着在大量情况下,我们在读取数据之前有一个额外的上下文

c++ - 提升在多个线程上运行的 asio strand 和 io_service

我不确定与strands相关的一个细节。假设以下情况:两个独立的对象,每个对象都有自己的链。每条链都与一个通用的io_service相关。每个对象都使用他的strand来发布和包装异步操作。如果我在多个线程上有这个(唯一的)io_service.run()'ing,我不确定是否会发生以下情况:由其中一个对象发布和异步包装的所有操作将非同时执行。因此,与其中一个对象相关的所有操作都将串行执行(发布的操作将按照与发布的顺序相同的顺序执行。包装的异步操作将以未指定的顺序执行,因为它们是异步的但仍在串行执行)。源自不同对象的两个操作(因此从与同一io_service相关的不同链对象发布或包装)

c++ - 使用 boost::asio 发送 Protobuf 消息

我正在尝试使用Google的ProtocolBuffers和boost::asio在C++中破解一个客户端。我的问题是我不知道如何将protobuf消息提供给asio。我所拥有的是://setup*sock-worksPlayerInfoinfo;info.set_name(name);//otherstuff现在我知道以下内容是错误的,但我还是会发布:size_trequest_length=info.ByteSize();boost::asio::write(*sock,boost::asio::buffer(info,request_length));据我所知,我必须将我的消息以

c++ - boost asio deadline_timer

我希望下面的代码打印Hello,world!每5秒,但发生的情况是程序暂停5秒,然后一遍又一遍地打印消息,没有后续暂停。我错过了什么?#include#include#includeusingnamespaceboost::asio;usingnamespacestd;io_serviceio;voidprint(constboost::system::error_code&/*e*/){cout编辑以在下面添加工作代码。谢谢大家。#include#include#include#include#includeusingnamespaceboost::asio;usingnamespa

c++ - Boost asio async_accept 在 Windows 下工作,但在 FreeBSD 下失败。怎么了?

编辑:看起来这不是我的代码而是构建环境。这既好又坏,因为现在我知道代码没问题,但不知道如何调试环境。这里有什么建议吗?请记住,我没有这台计算机的管理员权限。我一直在尝试让简单的代码在FreeBSD下工作。这是从Boost1.64asio调用async_accept不正常的。相同的代码在Windows下工作正常,但在FreeBSD下它接受客户端连接(客户端的连接调用成功)但从不调用它的处理程序。甚至不知道如何处理这个问题。(请注意,与我调用io_service.run()的其他相关问题不同)请帮忙。显示问题的自包含代码:#include#include#includenamespacea

c++ - 取消后无错误地调用 boost::asio 异步处理程序

我的代码在单个线程中使用boost::asio和io_service来执行各种套接字操作。所有操作都是异步的,每个处理程序都依赖于boost::system::error_code(特别是boost::asio::error::operation_aborted)来确定操作。在我更改逻辑以建立多个并发连接并选择最快的连接之​​前,它一直运行良好。也就是说,当第一个async_read_some处理程序触发时,我取消其他套接字(关闭、关闭-一切)并继续当前的套接字。在95%的情况下,调用其他套接字的读取处理程序时会出现operation_aborted错误。然而有时,这些读取处理程序被调