在写完关于TCP_NODELAY和TCP_CORK的答案之后,我意识到我必须缺少对TCP_CORK的要点的了解,因为我尚不清楚100%为何Linux开发人员认为有必要引入一个新的TCP_CORK标志,而不是仅仅依靠应用程序在适当的时间设置或清除现有的TCP_NODELAY标志。

特别是,如果我有一个Linux应用程序想要通过TCP流send()一些小/非连续的数据片段,而无需支付200mS

Nagle延迟税,同时将发送所需的数据包数量减到最少它,我可以通过以下两种方式之一进行操作:

使用TCP_CORK(伪代码):

int optval = 1;

setsockopt(sk, SOL_TCP, TCP_CORK, &optval, sizeof(int)); // put a cork in it

send(sk, ..);

send(sk, ..);

send(sk, ..);

optval = 0;

setsockopt(sk, SOL_TCP, TCP_CORK, &optval, sizeof(int)); // release the cork

或使用TCP_NODELAY(伪代码):

int optval = 0;

setsockopt(sk, IPPROTO_TCP, TCP_NODELAY, &optval, sizeof(int)); // turn on Nagle's

send(sk, ..);

send(sk, ..);

send(sk, ..);

optval = 1;

setsockopt(sk, IPPROTO_TCP, TCP_NODELAY, &optval, sizeof(int)); // turn Nagle's back off

多年来,我一直在使用后一种技术,并且效果很好,它的好处是还可以移植到非Linux操作系统(尽管在Linux外部,您必须在关闭Nagle的关闭后再次调用send())以确保立即发送数据包并避免Nagle延迟-

send()为零字节就足够了)。

现在,Linux开发人员很聪明,所以我怀疑他们对TCP_NODELAY的上述使用从未发生过。他们一定有某种理由感到不足,这导致他们引入了新的专有TCP_CORK标志。谁能解释这个原因是什么?

linux tcp cork,在此用例中,TCP_CORK和TCP_NODELAY是否有显着差异?相关推荐

  1. linux tcp cork,Socket选项系列之TCP_CORK(转)

    选项TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去,而选项 上右图显示的选项TCP_CORK的理论情况,但是在各个具体协议栈的实际实现中,有一些机制会打破选项TCP_CORK的这个& ...

  2. Linux TCP/IP协议栈之Socket的实现分析

    数据包的接收 作者:kendo http://www.skynet.org.cn/viewthread.php?tid=14&extra=page%3D1 Kernel:2.6.12 一.从网 ...

  3. Linux TCP 连接数修改

    Linux TCP 连接数修改 一. 文件数限制修改 (1) vi /etc/security/limits.conf * soft nofile 10240 * hard nofile 10240 ...

  4. linux tcp连接计算机,计算机基础知识——linux socket套接字tcp连接分析

    2016.7.4 今天晚上对项目顶层文件(daemon)进行了分析,对其中的TCP连接进行具体的代码级分析. 1.需求分析 首先得知道我们这里为什么要用TCP连接,我们的整个测试系统是由上位机作为客户 ...

  5. linux tcp文件分包_畅谈linux下TCP(下)

    三.TCP传输阶段 1 .TCP 包头 先认识一下TCP包头, 常规TCP包头为20个字节. 图一.png 可以通过TCP OPTION 扩展包头内容.TCP OPTION 是一个比较灵活的TLV结构 ...

  6. Linux TCP/IP大合集

    简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp. 文件描述符的操作(如: open)返回的是一个文件描述符,内核会在 ...

  7. linux系统数据库类型,linux系统下调度数据库类型资源库中的kettle job

    已经存在kettle的一个资源库enfo,在目录/works/wxj下面有一个job (testmailsuccess.kjb)如何实现手工在kettle外部执行此job和让系统每天定时的调用此job ...

  8. 彻底实现Linux TCP的Pacing发送逻辑-普通timer版

    又到了周末,过年前的倒数第2个周末,工作和生活上的压力早已卸载,自己也就有必要写点自己觉得感兴趣或者不公道的事情了.即便如此,白天我并不自由,不管是工作日还是周末,我必须在公司或者家里做一些例行的事情 ...

  9. 彻底实现Linux TCP的Pacing发送逻辑-高精度hrtimer版

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 代码的实 ...

最新文章

  1. 带你「周游世界」的 MODNet 算法
  2. Windows 2008下安装配置 WDS Windows部署服务
  3. Linux基础命令的操作(时间与日期,日历,计算器)
  4. 【Flutter】Flutter 自定义字体 ( 下载 TTF 字体 | pubspec.yaml 配置字体资源 | 同步资源 | 全局应用字体 | 局部应用字体 )
  5. 报表测试用例设计方法总结
  6. linux shell sed d删除指定行并更换分隔符为#
  7. php5.4 zend安装教程,linux下php5.4安装Zend Guard Loader扩展
  8. 一些实用的编程模式 | Options模式
  9. 2021计算机应用基础形考答案模块2,国家开放大学计算机应用基础模块2形考答案-20210603091431.docx-原创力文档...
  10. 需求文档:没有标准,只有沟通
  11. 【连载】如何掌握openGauss数据库核心技术?秘诀二:拿捏执行器技术(1)
  12. 第十二章: 部署Django
  13. Linux基础命令---cp
  14. Direct2D教程(七)单色画刷
  15. python+源码如何编译安装mysql_Python源码安装cx_Oracle
  16. 开心游戏网页(附效果图)
  17. Windows网络编程笔记5 -- 其他套接字
  18. 【现代密码学】作业一
  19. esxi - with nvidia geforce 10 titan xp card
  20. 漂亮的壁纸,这些网站就足够了。

热门文章

  1. 图像的旋转和尺度缩放在对数极坐标系下的研究
  2. Chrome 爬虫插件 Web Scraper
  3. Struts2源码阅读(四)_DispatcherConfigurationProvider续
  4. mysql创建table w3c_MySQL ALTER命令
  5. github java开源项目经验_3月份GitHub上最热门的Java开源项目
  6. sync.Map 源码学习
  7. c语言程序设计主编张玉生教材答案,清华大学出版社-图书详情-《Visual Basic程序设计实验指导》...
  8. ubuntu 设置开机执行脚本_Ubuntu 16.04设置rc.local开机启动命令/脚本的方法
  9. python获取钉钉日志数据_python3实现zabbix告警推送钉钉的示例
  10. swiper5 点击图换下一张_电商小牛教你如何选择点击率超同行三倍的爆品主图!...