无法关闭 TCP_NODELAY

2024-02-10

我正在使用 Boost asio 发送 TCP 消息。我设置了 NO_DELAY 选项,因为这是一个“实时”控制系统。我看到使用 Wireshark 在消息中设置了 PSH 标志。我对它的表现很满意,它正在按预期工作。

出于兴趣,我决定关闭 NO_DELAY 并测量性能差异。

我交换了现有的代码:

m_tcpSocket.open(boost::asio::ip::tcp::v4());
boost::asio::ip::tcp::no_delay noDelayOption(true);
m_tcpSocket.set_option(noDelayOption);

// snip create endpoint
m_tcpSocket.connect(m_tcpServerEndpoint);

// snip build message
m_tcpSocket.send(boost::asio::buffer(pDataBuffer, size));

for

boost::asio::ip::tcp::no_delay noDelayOption(false);
m_tcpSocket.set_option(noDelayOption);

我仍然看到 PSH 标志被设置。

我还尝试删除 set_option 代码,但仍然看到它已设置。

在 Wireshark 中我看到:

104 - 105  SYN
105 - 104  SYN, ACK
104 - 105  ACK
104 - 105  PSH, ACK + my message
105 - 104  ACK

其中 104 和 105 是我的 2 台 PC 的 IP 地址。 我也很惊讶带有我的数据的消息有一个 ACK​​。

如何关闭 NO_DELAY?


您的代码看起来设置正确TCP_NODELAY打开或关闭。设置TCP_NODELAY关闭,使用:

socket.set_option(boost::asio::ip::tcp::no_delay(false));

The TCP RFC https://www.rfc-editor.org/rfc/rfc793#page-15将 PSH 定义为推送函数。简而言之,它是一个标志,通知接收方所有数据已发送,因此将数据向上转发协议栈。 Boost.Asiomaps http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/overview/networking/bsd_sockets.html它的 API 是针对 BSD 套接字的,而 BSD 套接字不提供控制 PSH 标志的方法。这通常由协议栈中的内核在清除缓冲区时处理。

From TCP/IP 图解 https://rads.stackoverflow.com/amzn/click/com/0201633469:

该标志通常用于指示在发送数据包的同时发送数据包一侧的缓冲区已被清空。换句话说,当设置了 PSH 位字段的数据包离开发送方时,发送方不再有数据可发送。

[...]

推送(接收者应尽快将此数据传递给应用程序 - 未可靠地实现或使用)。

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

无法关闭 TCP_NODELAY 的相关文章

  • boost::process 异步 IO 示例不起作用?

    以下程序 include
  • 将 (Boost) Asio 与 Android NDK 结合使用的限制

    目前在 Android 平台上将 Asio 与 NDK 结合使用有哪些限制 除了 Asio 还有其他你肯定会选择的选择吗 因此没有限制 唯一令人担忧的是缺乏官方支持 你必须构建升压库 参考我的帖子https stackoverflow co
  • Boost ASIO 和 co_await- 与任何第三方回调一起使用吗?

    一个简单的函数 awaitable
  • 使用 boost asio 创建 iostream 并指定 ip 和端口

    我有一个关于 boost asio 库的问题 我成功地尝试在客户端和服务器之间创建一个套接字 这涉及创建解析器以便指定服务器的IP和端口 服务器只需要端口 和其他对象 但是 最重要的是 有必要使用write and read some作为从
  • C++ 多线程服务器帮助

    我正在使用 boost asio 在 C 中开发多线程服务器 目前我遇到的一个设计问题涉及擦除连接 我有一个服务器实例 其中包含连接对象向量 这些连接接收我解析的命令 其中一个命令专门处理向我的向量中的所有连接发送数据 现在 当连接断开时
  • 如何在 Android NDK 中使用 Asio(独立于 Boost)?

    Asio 没有 Boost 应该只使用标题就可以使用 对吗 默认情况下 Asio 是一个仅包含头文件的库 http think async com http think async com 我知道Asio内部仍然依赖Boost 这是我的设置
  • 如何使用 VBA 从 Outlook 收件箱自动延迟发送电子邮件?

    我是 VBA 方面的新手 我想创建一个规则 脚本 可以按指定的延迟自动转发 Outlook 收件箱中收到的电子邮件 您能给我一些关于如何实现这一目标的指示吗 我试过 Public Declare Sub Sleep Lib kernel32
  • boost::asio::async_resolve 问题

    我正在构造一个使用的 Socket 类boost asio 首先 我做了一个connect获取主机和端口并将其解析为 IP 地址的方法 这很有效 所以我决定看看async resolve 但是 我的回调总是收到错误代码995 使用与同步工作
  • boost read_until 不会在分隔符处停止

    我使用 boost read until 函数来促进通过套接字接收和解析 HTTP 消息 所以我是什么trying要做的就是从套接字中 read until 直到 r n 我认为应该给我一行 HTTP 标头 每个 HTTP 标头行以 r n
  • 在 lambda 函数中使用 auto self(shared_from_this()) 变量的原因是什么?

    我阅读了 boost asio http 服务器示例代码 请参阅http www boost org doc libs 1 54 0 doc html boost asio example cpp11 http server connect
  • Objective C - 音频延迟估计的互相关

    我想知道是否有人知道如何执行互相关两个音频信号之间iOS 我想将接收器 我正在从麦克风接收信号 处获得的 FFT 窗口与发射器处 正在播放音轨 处的 FFT 窗口对齐 即确保每个窗口的第一个样本 除了发射机的 同步 周期之外 也将是接收机的
  • C++ Boost.asio Ping

    我正在尝试编写一个程序来列出网络上设备的所有 IP 地址 其主要组成部分之一是能够对设备执行 ping 操作 这个程序必须在Linux Windows和Mac上运行 所以我选择了Boost库 我设法在文档中找到这个示例 http www b
  • Task.Delay 是否真的像 I/O 操作一样异步,即它依赖于硬件和中断而不是线程?

    我发现了大量相关内容 但这些内容都是拐弯抹角的 但我始终无法找到答案 我几乎 100 确定Task Delay int 不使用线程 因为我可以在只有 16 个逻辑处理器的机器上运行此代码 var tasks new List
  • 使用 Boost.Asio 进行广播的问题

    如果问题之前已得到解答 我提前表示歉意 但我已经搜索并没有找到任何对我有帮助的东西 正如问题标题所示 我正在尝试将包从服务器广播到一组侦听任何消息的客户端 客户端将计算一秒钟内收到的消息数 服务器端的事情是这样的 class Server
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • Boost async_write问题

    我将展示一些代码 void wh const boost system error code ec std size t bytes transferred std cout lt lt test int main int argc cha
  • 提升 asio 和 endian

    我不知道 boost asio 是否处理字节序 Asio 确实会转换类似的东西port进入网络秩序 转换函数不作为官方接口的一部分公开 而是隐藏在detail名称空间代替 例如boost asio detail socket ops hos
  • 通过 SocketCAN 进行 boost::asio

    我正在考虑利用升压阿西奥 http www boost org doc libs 1 49 0 doc html boost asio html从a读取数据套接字CAN http en wikipedia org wiki SocketCA
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • C++ 使用 Windows 命名管道

    由于某种原因 桅杆和从属装置都失败了 但是我可以找到任何关于它们如何工作的好例子 所以我不确定我哪里出了问题 在 ConnectNamedPipe 之后 主设备永远不会退出 WaitForSingleObject 并且从设备在第一个 boo

随机推荐

  • 平滑 ggplot2 中的 geom_tile 地图 - 插值数据

    I m trying to plot an spatial map from a lon lat data set Following the example in https stackoverflow com a 19339663 70
  • 从主线程终止辅助线程(可可)

    我正在 cocoa 框架的帮助下开发一个用 Objective C 编写的小型应用程序 但遇到了多线程问题 如果有人可以帮助我提供一些关于如何从主线程终止辅助 工作 线程的指导 我将非常感激 IBAction startWorking id
  • Discord js / 检查用户是否在特定语音频道中

    我希望我的机器人使用 const voiceChannel message member voice channel const voiceChannelID message member voice channelID if voiceC
  • 列出从文件输入中选择的文件

    我想列出从文件输入中选择的文件 div class fileUpload myButton span Upload span div
  • VS2012 nmake 使用 v110_xp 工具集?

    有没有办法使用v110 xp使用 nmake 编译时的工具集 而不是默认的 v110 我正在尝试为 VisualStudio2012 编译 Qt5 库 并且我也需要它在 Windows XP 计算机上工作 我已经成功地使用 VS2012 和
  • 调用函数而不等待它

    你好 我想知道是否有一种方法可以调用函数 方法 最好是Python或Java 并继续执行而不等待它 Example def a b call a function b return something def b something tha
  • 在运行时替换 QWidget 对象

    在我的应用程序中 我必须用自定义的 QLineEdit 替换所有 QLineEdit 元素 为此 有不同的解决方案 修改从 pyuic4 生成的 py 文件 并将所有 QLineEdit 对象替换为我的一个 LineEdit 这个解决方案并
  • Google Spreadsheet API v4 使用“ApiKey”在电子表格中“添加行”

    我正在尝试使用 Google Spreadsheet API v4 直接使用 ApiKey 在电子表格中 添加行 而不使用 OAuth 2 0 如果我使用 OAuth 2 0 它成功 添加行 但我的要求是使用 ApiKey 参考了这个网址
  • django-auth-ldap 身份验证失败

    我正在尝试使用Django Auth Ldap https pythonhosted org django auth ldap 在我的项目 Django 1 6 Python 2 7 中 但它不起作用 我的活动目录模式是 我已经通过安装 l
  • 将 Catalyst 应用程序部署到生产服务器的最佳实践是什么?

    将 Catalyst 应用程序部署到生产服务器的好方法是什么 目前 我只是在存储库的根目录中有一个 FastCGI 调度脚本 当我想要更新服务器代码时 我将分支推送到服务器 这很简单 但并不完美 如果代码在服务器计算机上的测试失败 例如由于
  • 在 cookie 中设置 Django REST Framework JWT

    我在用djangorestframework jwt https github com GetBlimp django rest framework jwt对用户进行身份验证 我已经覆盖了内置的JSONWebTokenAPIView也在响应
  • 如何使用数据表和服务器端处理进行自定义过滤

    我在用数据表 http datatables net在我的 Web 应用程序中显示表格数据 并将其配置为使用服务器端处理 http datatables net usage server side 即通过 AJAX 查询服务器以获取过滤后的
  • 如果 .Create() 无法实例化,它应该返回空对象、null 还是抛出异常?

    我希望能够使用这种代码实例化应用程序中的任何对象 SmartForm smartForm SmartForm Create id 23 Customer customer Customer Create id 222 我现在正在讨论如果该对
  • 如何让 tcpdump 写入文件并标准输出适当的数据? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我希望有tcpdump将原始数据包数据写入文件中 并在捕获数据包时将数据包分析显示到标准输出中 通过分析 我的意思是它通常显示的行 w
  • 如何消除特定页面的顺风预战

    里面有一个选项tailwind config cjs关闭预检 但我不想在整个项目中关闭它们 我需要为某些特定页面启用它们 有没有办法做到这一点 关闭预检 tailwind config cjs corePlugins preflight f
  • Pymongo $in 查询不起作用

    在 Pymongo 中看到一些奇怪的行为 in询问 查找满足以下查询的记录 speciesCollection find SPCOMNAME in paddlefish lake sturgeon 查询没有返回任何记录 如果我将其更改为 f
  • 如何使用javascript在IE中的表单中设置文本区域值

    如果是 Firefox 我可以使用它在表单 提交问题 中设置文本区域 selectedtext 值 但在 IE 中失败 document submitquestion selectedtext value txt 这应该有效
  • 通过 Excel 的 eDrawings API

    我正在尝试通过 Excel 使用 edrawings VBA api 我已经下载了 edrawings SDK 似乎 api 仅通过用户表单运行 我通过 Excel 为 SolidWorks 制作了一些 VBA 宏 但与 SolidWork
  • AWS S3 存储桶“404 未找到”

    目前我正在托管一个捆绑包Angular 2应用程序在AWS S3 bucket 所以它只包含 html and js files 绝对路径http example com 确实有效 但如果我切换到任何链接 例如http example co
  • 无法关闭 TCP_NODELAY

    我正在使用 Boost asio 发送 TCP 消息 我设置了 NO DELAY 选项 因为这是一个 实时 控制系统 我看到使用 Wireshark 在消息中设置了 PSH 标志 我对它的表现很满意 它正在按预期工作 出于兴趣 我决定关闭