草庐IT

asio-acceptor

全部标签

c++ - 如何检查套接字是否在 Boost.Asio 中关闭?

检查远程连接端的套接字是否关闭的最简单方法是什么?socket::is_open()返回true,即使它在远程端关闭(我正在使用boost::asio::ip::tcp::socket).我可以尝试从流中读取并查看它是否成功,但我必须更改我的程序逻辑以使其以这种方式工作(我不希望此时从流中提取数据支票)。 最佳答案 只需在您的async_receive处理程序中检查boost::asio::error::eof错误。这意味着连接已关闭。这是唯一正确的方法。 关于c++-如何检查套接字是否

android - Android 设备上的 Boost Asio deadline_timer 不会在到期时间触发,而是在稍后的时间触发

我们正在尝试在Android设备上使用boostasiodeadline_timers。我们有一个要求,我们需要每100毫秒触发一个定时器。我使用了如下代码。但是,计时器似乎每1秒触发一次。我们应该在Android系统中进行哪些微调才能使boostasio截止时间计时器按预期工作?注意:以下代码在普通linux系统上按预期工作。是什么让它在Andorid系统上的工作方式不同?代码:voidprint(asio::deadline_timer*ptimer,constasio::error_code&err){structtimevaltval;if(0==gettimeofday(&t

c++ - boost::asio::async_write() 与 boost::asio::write()

在将数据缓冲区传输到线路上所花费的时间方面是否有任何优势如果你使用boost::asio::write(m_socket,asio::buffer(dataOut_,len),asio::transfer_all());代替boost::asio::async_write(m_socket,boost::asio::buffer(hbs,sizeof(hbs)),boost::bind(&Client::handle_pulse,this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transfer

c++ - 如何等待所有 boost 完成 :asio's stackful coroutines?

我正在用asio::spawn启动一些协程,我想等到所有协程都完成后再做一些其他工作。如何实现?控制流程如下:asio::spawn(io,[](asio::yield_contextyield){...//startingfewcoroutinesasio::spawn(yield,[](asio::yield_contextyield2){...});asio::spawn(yield,[](asio::yield_contextyield2){...});asio::spawn(yield,[](asio::yield_contextyield2){...});asio::spa

c++ - boost::asio::io_service 优先级如何工作?

我正在使用boost::asio::io_service来管理一些异步TCP通信。这意味着我创建了一个boost::asio::ip::tcp::socket并将io_service提供给它。当我开始交流时,它的示意图如下:异步解析->回调->异步连接->回调->异步写入->回调->异步读取我省略了resolve和bind等部分。假设套接字已绑定(bind)到端口并且主机名已解析(因此连接意味着建立到端点的真实连接)现在的重点是我可以使用相同的io_service对象启动多个异步连接。这意味着,例如,在我的io_service线程中,程序将要AsyncWrite一些数据,主线程将调用A

c++ - mmorpg 服务器端的网络库(libuv/boost::asio?)

我目前正在重写一个非常古老的mmorpg的服务器端,我一直在寻找一个很好的开源网络库来与C/C++一起使用。由于客户端已经存在,我不能使用任何强制执行某种数据包结构或通信的库(例如,RakNet)。服务器将主要在三个不同的端口上使用UDP。在网上搜索后,我发现了boost::asio和libuv。boost::asio似乎是一个成熟的选择,因为我已经在使用boost,但我读到他们的UDP实现有点差,并且由于某些原因它无法实现多核处理器的最大性能使用epoll时锁定。libuv看起来很棒,是事件驱动的,有一个大项目支持,但目前还没有此类项目使用它,所以我对使用它有疑问。大家怎么看?我可以

c++ - 使用 boost::asio 丢弃数据

我在异步模式下使用boost::asio,我想跳过/丢弃/删除通过TCP发送给我的消息。我想这样做是因为我已经阅读了消息的标题,并且我知道我对此不感兴趣。消息可能很大,所以我宁愿不为它分配空间,甚至最好不要将它传输到用户空间。我看到了boost::asio::null_buffers,但它似乎不适用于此处(参见https://svn.boost.org/trac/boost/ticket/3627)。 最佳答案 据我所知,BSD套接字接口(interface)没有提供此功能。您总是必须读入缓冲区。现在,为了不分配巨大的缓冲区,您可以

c++ - `boost::system::error_code`失败时应该提供哪个 `boost::asio::ip::tcp::resolver::resolve()`值?

我想返回一个boost::system::error_code指示主机/服务是否可以解析。主机/服务查找失败可能有多种原因(例如网络连接问题或无效参数)。应该返回什么? 最佳答案 您必须提供错误代码和类别才能创建error_code对象。这是一个示例,假设该错误是由于另一台主机拒绝连接造成的:error_codeec(errc::connection_refused,system_category());returnec;您也可以在使用系统类别时将errno值作为错误代码传递。例如:#include#include#includev

c++ - 标准输入按键的 asio 服务处理程序

我已经改编了step3oftheBoostasiotutorial永远运行,并每秒显示一次“tick”和“tock”而不是计数器:#include#include#include#includevoidprint(constboost::system::error_code&/*e*/,boost::asio::deadline_timer*t,int*count){if(!((*count)%2))std::coutexpires_at(t->expires_at()+boost::posix_time::seconds(1));t->async_wait(boost::bind(p

c++ - Boost.Asio HTTP 库

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我正在寻找高级高级http库来为大型Web应用程序编写native前端。基于boost.asio的库是首选,因为我已经在使用boost(和asio)。Cookie、session和参数处理是一项要求。如有任何帮助,我们将不胜感激。