草庐IT

asio-acceptor

全部标签

c++ - 从 boost::asio::io_service 中删除所有处理程序而不调用它们

我想在重用之前从IO_service中删除所有处理程序。这可能吗?我正在编写涉及asio::io_service的单元测试。在每个测试用例之间,我想从全局io_service中清除处理程序。我认为io_service::reset会这样做,但事实并非如此。reset()只允许io_service被恢复。最后一个测试用例中的所有处理程序仍在排队。我只需要为单元测试执行此操作,因此任何疯狂的hack都会起作用。更多信息:io_service来自deadline_timer成员变量。deadline_timer是我正在测试的代码的一部分,因此我无法更改它的构造方式。我通过deadline_t

c++ - 使用 Boost::Asio 进行双向 TCP 通信的程序结构

首先,我希望我的问题是有道理的,甚至是可能的!从我读过的关于TCP套接字和Boost::ASIO的内容来看,我认为应该是这样。我要做的是设置两台机器,并在它们之间通过TCP建立一个有效的双向读/写链路。任何一方都应该能够发送一些数据供另一方使用。关于TCP(/IP?)的第一个令人困惑的部分是它需要这种客户端/服务器模型。但是,阅读表明任何一方都可以写作或阅读,所以我还没有完全气馁。我不介意建立任意一方作为客户端,另一方作为服务器。在我的申请中,这可以提前协商,我不关心。不幸的是,我遇到的所有示例似乎都集中在连接到服务器的客户端上,然后服务器立即将一些数据发送回。但我希望客户端也能够写入

c++ - Boost.Asio : The difference between async_read and async_receive

async_read和有什么区别?和async_receive? 最佳答案 async_receive是一个仅接收到缓冲区的函数,但可能无法接收您要求的数量。(它会相等或更少,永远不会更多。)但是,async_read将始终收到您要求的金额,如其所述:Thisfunctionisusedtoasynchronouslyreadacertainnumberofbytesofdatafromastream.Thefunctioncallalwaysreturnsimmediately.Theasynchronousoperationwi

C++ boost asio Windows 文件句柄 a​​sync_read_until 无限循环 - 没有 eof

我在VS2010中使用boost1.50,使用Windows文件HANDLE进行读取(与使用套接字的asio相比,这似乎相对不常见)。问题Thehandle_readcallbackgetstoline8andreturnsthefirstbitwithallofline1appended;furthercallbackscyclethroughfromline2again,adnauseum:打开一个简短的文本文件(如下)获得预期的handle_read回调,第1行到第7行内容正确下一个回调有一个比预期更长的字节读取length参数虽然不使用length,但getline会从asio

c++ - boost::asio::io_service 是否保留处理程序的顺序?

是否boost::asio::io_service保证处理程序的调用顺序与通过post()给出的顺序相同?我在文档中找不到任何这样的说法。假设对io_service::post的调用是序列化的。 最佳答案 afaik如果你想保证post处理程序执行的顺序,你必须使用strandasdescribedinthedocs. 关于c++-boost::asio::io_service是否保留处理程序的顺序?,我们在StackOverflow上找到一个类似的问题: h

c++ - 编译 boost.asio 示例时出现链接器错误

我正在尝试学习一点C++和Boost.Asio。我正在尝试编译以下代码示例:#include#include#includeusingboost::asio::ip::tcp;intmain(intargc,char*argv[]){try{if(argc!=2){std::cerr"buf;boost::system::error_codeerror;size_tlen=socket.read_some(boost::asio::buffer(buf),error);if(error==boost::asio::error::eof)break;//Connectionclosedc

c++ - boost::asio 和事件对象

我已经实现了一些基于模块的主动对象设计模式。这是非常简单的实现。我有Scheduler、ActivationList、Requests和Futures来获得响应。我的要求是这样的:对事件对象的访问应通过执行其方法进行序列化在它自己的线程中(主请求和事件对象的假设)设计模式)调用者应该能够指定请求执行的优先级。这意味着如果有多个请求等待执行,它们将按照分配给每个请求的优先级进行排序。优先级较高的请求应首先执行,因此如果ActivationList上始终有一些请求未决,并且它们的优先级高于给定请求,则永远不会执行此请求-对我来说没问题应该可以指定列表中未决请求的最大数量(限制内存使用)应该

c++ - 使用 Boost.Asio 时确保有效对象生命周期的最佳方法是什么?

最近玩了很多Boost.Asio。我非常喜欢这个库,因为它提供了一种从当今多核系统中榨取性能的绝妙方法。我曾多次问过自己一个问题,我认为在使用Asio进行异步调用时,关于对象生命周期/所有权的问题值得一提。我反复遇到的问题是,您经常不得不“过期”一个仍然有异步回调待处理的对象。如果该对象在调用回调之前超出范围,则不可避免地会发生故障。为了解决这个问题,我使用boost::enable_shared_from_this模板作为大多数基于asio的类的基类。这工作正常,但有点麻烦:通常这也意味着保护构造函数并向类添加工厂方法以确保在shared_ptr内创建所有实例。我只是想知道其他人是如

c++ - `deadline_timer`中 `waitable_timer`和 `boost asio`的区别

要在5秒内使计时器到期,这两者有什么实际区别吗?在这种情况下,任何一个(性能、资源等)比另一个更可取吗?[选项1]deadline_timer:boost::asio::deadline_timertimer(io_service);timer.expires_from_now(boost::posix_time::seconds(5));[选项2]waitable_timer(system_timer或steady_timer):boost::asio::system_timertimer(io_service);timer.expires_from_now(std::chrono:

c++ - boost::asio 异步服务器设计

目前,当服务器读取流的前4个字节然后在header解码后读取N个字节时,我正在使用设计。但我发现第一次async_read和第二次读取之间的时间是3-4毫秒。我刚刚从回调中打印了控制台时间戳以进行测量。我总共发送了10个字节的数据。为什么要花这么多时间阅读?IrunningitindebugmodebutIthinkthat1connectionfordebugisnotsomuchtohavea3msdelaybetweenreadsfromsocket.MaybeIneedanotherapproachtocutTCPstreamon"packets"?更新:我在这里发布一些代码v