当前位置: 首页 > 面试题库 >

禁用TCP延迟的ACK

丘学海
2023-03-14
问题内容

我有一个应用程序可以通过TCP接收相对稀疏的流量,而没有应用程序级别的响应。我认为TCP堆栈正在发送延迟的ACK(基于对网络数据包捕获的浏览)。建议为单个套接字禁用网络堆栈中的延迟ACK的推荐方法是什么?我看过了TCP_QUICKACK,但看来堆栈还是会改变我的脚下。

它运行在Linux 2.6内核上,我不担心可移植性。


问题答案:

你可以setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int))以后每次recv执行。看来TCP_QUICKACK只有在发送或接收数据时才复位;如果您不发送任何数据,则只有在接收到数据后它才会被重置,在这种情况下,您只需重新设置即可。

您可以在第14 个字段中进行检查/proc/net/tcp;如果不是1,则应立即发送ACK …如果我正确读取了TCP代码。(我也不是专家。)



 类似资料:
  • 问题内容: 我正在尝试使用新的React Lazy和Suspense创建后备加载组件。这很好用,但后备时间仅显示几毫秒。有没有办法增加额外的延迟或最短时间,因此我可以在渲染下一个组件之前显示该组件的动画? 现在懒导入 等待组件: 我可以做这样的事情吗? 问题答案: 函数应该返回对象的承诺,该对象由具有默认导出功能的模块返回。不会返回承诺,也不能那样使用。尽管任意承诺可以: 如果目标是提供 最小的

  • 延迟调用一个函数,直到当前调用堆栈已经清除。 使用 setTimeout() ,超时时间为1ms,将新事件添加到浏览器事件队列,并允许渲染引擎完成其工作。使用展开 (...) 运算符为函数提供任意数量的参数。 const defer = (fn, ...args) => setTimeout(fn, 1, ...args); // Example A: defer(console.log, 'a

  • Go 语言中没有提供其它面向对象语言的析构函数,但是 Go 语言提供了 defer 语句用于实现其它面向对象语言析构函数的功能 defer 语句常用于 释放资源、解除锁定 以及 错误处理 等 例如C语言中我们申请了一块内存空间,那么不使用时我们就必须释放这块存储空间 例如C语言中我们打开了一个文件,那么我们不使用时就要关闭这个文件 例如C语言中我们打开了一个数据库, 那么我们不使用时就要关闭这个数

  • 我将Spring和Spring Kafka用于一个批处理服务,该服务从Kafka收集数据,直到满足某些条件,然后转储数据。 我想在数据离开我的服务时确认提交,但它可能会在内存中停留5-10分钟。 是否有任何其他方法来确认/提交来自Spring Kafka的偏移量,只给出分区/偏移量信息?

  • 问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :

  • 问题内容: 到底发生了什么 为什么我不能分配时间作为变量? 以及如何使用变量? 给定错误>>> 二进制运算符’+’不能应用于’DispatchTime’和’Float’类型的操作数 问题答案: 是一双。您不能将float和double值加在一起。 更换 与 它将正常工作。