当连接断开时,boost::asio::async_write 中的 WriteHandler 无法正常工作(防火墙/手动断开网络)

2024-05-22

我一直在尝试使用 boost::asio 编写客户端-服务器应用程序,总的来说,该应用程序工作得很好,但是当连接(客户端 服务器)被防火墙或手动禁用新网络卡删除。

这是代码片段:

void write(const CommunicatorMessage & msg, std::function<void(bool)> writeCallback)
        {
            io_service.dispatch(
                [this, msg, writeCallback]()
            {
                boost::asio::async_write(socket, boost::asio::buffer(msg.data(), msg.length()), [this, msg, writeCallback](boost::system::error_code ec, std::size_t length)
                {
                    writeCallback(ec != 0);
                    if (!ec)
                    {
                        LOG_DEBUG("Number of bytes written into the buffer: " << length << " Error code: " << ec);
                        LOG_DEBUG("Successfully send msg: " << msg);
                    }
                    else
                    {
                        LOG_ERROR("Failed sending msg: " << msg);
                        throw std::exception(ec.message().c_str());
                    }
                });
            });
        }

即使数据没有到达服务器,来自 Writehandler 的数据也是有效的(错误代码为 0,bytes_transferred 正确)。我已经用 Wireshark 跟踪了整个流程(这是一个带有屏幕截图的链接Link https://i.stack.imgur.com/SBiMA.png)


When 异步写入发送成功意味着它已成功写入内核缓冲区。但是,不能保证数据包已送达。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当连接断开时,boost::asio::async_write 中的 WriteHandler 无法正常工作(防火墙/手动断开网络) 的相关文章

随机推荐

  • 检查用户是否从后端 Firebase 身份验证登录

    在我的前端 用户使用 Firebase 身份验证浏览器登录 那部分工作得很好 除了 Firebase 后端之外 我还有提供其他内容的 NodeJS 后端 但是 我需要仅向经过身份验证的用户提供内容 我的问题是 有没有办法让我的 NodeJS
  • 如何在Django中编写sql COALESCE

    我是姜戈的新手 如何将 COALESCE sql 查询集写入 django orm query SELECT COALESCE max CAST order no as UNSIGNED 0 as o id from nanossc Sal
  • 使用稍后在 C++ 中定义的类类型定义类成员

    就像我想做这样的事情一样 class Object public World Parent World This here Object World Parent World NULL Parent World Parent World c
  • Rails 4.1 AWS Beanstalk 找不到秘密密钥库

    我正在尝试在 AWS Beanstalk 上上传我的 Rails 项目 我已经运行 eb init eb start 并将数据库设置配置为指向 RDS 在我使用 git aws push 推送并等待 AWS 服务器启动后 提供的链接显示 5
  • 通过 Caffe 中的层提供数据的多种路径

    我想在 Caffe 中构建一个网络 其中传入的数据最初被分割 分别通过同一组层 最后使用 eltwise 层重新组合 此后 所有部件将作为一个斑点移动 除了学习的参数之外 数据并行移动的网络部分的层配置将是相同的 有没有一种方法可以在 Ca
  • 当 div 移动以填充其他淡出的 div 留下的空白空间时,如何为它们设置动画

    我有一组div 每个div对应一组类别 当我单击过滤器时 这将更改 div 的类 并根据这些类别使它们可见或隐藏 我控制 div 淡入 淡出的方式 它们做得缓慢而漂亮 但每次 div 消失时 保持不变的 div 会突然移动以填充隐藏的 di
  • Visual Studio 2010 - 在调试期间查看列表导致超时

    我正在尝试调试一个项目 突然遇到一个问题 如果我尝试查看它 枚举任何对象集合都会导致超时 如果我正常运行该程序 就没有问题 如果我尝试查看任何集合 例如列表 我会收到超时错误 整个事情就会崩溃 我认为我的一个更复杂的集合可能出了问题 所以我
  • 按不同日期拆分列表

    希望还有一个简单的 假设我有一个这样的集合 List
  • ODP.Net - OracleDataReader.读取速度非常慢

    我在 ODP Net 中的 OracleDataReader 方面遇到很多麻烦 基本上 我有一个参数化查询 需要 1 5 秒的时间来运行 返回大约 450 条记录 然后需要 60 90 秒的时间来循环 甚至没有代码在循环中运行 实际上是迭代
  • iOS 应用程序启动速度非常慢并且在 ImageLoaderMachO::loadCodeSignature 中停止

    我正在为 iOS 8 3 开发一个基于 Swift 的应用程序 我观察到该应用程序启动非常非常慢 并且似乎在应用程序加载过程中停滞不前 应用程序速度变慢before我的任何代码都会被执行 事实上 只有一个线程处于活动状态 仅使用了 60k
  • 计算div中有多少个元素

    我有一个div 里面有span 有没有一种方法可以计算 div 中有多少个元素 然后将其作为值给出 例如 一个 div 中有 5 个跨度 那么它会对其进行计数并发出警报 5 请使用 JavaScript 谢谢 如果你想要后代的数量 你可以使
  • C#中初始化和赋值有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 变量初始化与赋值 https stackoverflow com questions 3779707 c variable initializations vs assignment 就像标题一样
  • 如何在基于其他数据帧的数据帧中创建联接?

    我有 2 个数据框 一份包含学生批次详细信息 另一份包含分数 我想加入 2 个数据框 数据框1包含 s1 s2 s3 Stud1 Stud2 Stud3 Stud2 Stud4 Stud1 Stud1 Stud3 Stud4 数据框2包含
  • 如何从另一个工作簿(excel)复制数据?

    我已经有一个可以创建工作表和其他一些东西的宏 创建工作表后 我是否想调用另一个宏 将数据从第二个 Excel 其打开 复制到第一个活动 Excel 文件 首先 我想复制到标题 但我无法让它工作 不断出现错误 Sub CopyData she
  • 使用 Python pdb 检查未处理异常原因的最简单方法是什么?

    我刚刚将所有单元测试数据从 JSON 转换为 YAML 现在代码中的某处引发了异常 更具体地说 这是打印的回溯 Traceback most recent call last File tests test addrtools py lin
  • 在 Python 中静默打印 PDF

    我正在尝试使用 Python 打印 PDF 而不打开 PDF 查看器应用程序 Adobe Foxit 等 我还需要知道打印何时完成 以删除文件 Here http permalink gmane org gmane comp python
  • 有没有纯Python的表类?

    我正在构建一个需要分析表格数据的应用程序 我想执行一些列操作 例如重命名列 删除列以及根据现有列的值计算新列的能力 我的第一选择是 Pandas 之类的东西 但是一个限制是这个项目必须是跨平台的并且非常容易在 virtualenv 中部署
  • 根据日期列过滤并创建列

    我有一个样本数据如下 date Deadline 2018 08 01 2018 08 11 2018 09 18 2018 12 08 2018 12 18 我想用代码中描述的条件填写截止日期列 如 1 DL 2 DL 3 DL 等 基于
  • 如何在线程和小程序中使用双缓冲

    我有一个关于何时调用绘制和更新方法的问题 我有游戏小程序 我想在其中使用双缓冲 但我无法使用它 问题是 在我的游戏中 有一个球在 run 方法内移动 我想知道如何使用双缓冲来交换屏幕外图像和当前图像 请有人帮忙 当同时存在 update 和
  • 当连接断开时,boost::asio::async_write 中的 WriteHandler 无法正常工作(防火墙/手动断开网络)

    我一直在尝试使用 boost asio 编写客户端 服务器应用程序 总的来说 该应用程序工作得很好 但是当连接 客户端 服务器 被防火墙或手动禁用新网络卡删除 这是代码片段 void write const CommunicatorMess