TCP为了防止在网络中过多的小分组会导致阻塞,因此提供了Nagle算法:要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,TCP收集这些少量的分组,并在确认到来时以一个分组的方式发出去。Nagle算法会导致自己写的TCP程序中,小分组不能及时的发送出去。

现在我写了个基于TCP的socket程序,希望AP往client端发送1000个16字节的报文。结果发现client端接收到的报文并不是每次大小都是82字节(82字节是因为有66字节的TCP和IP头等,外加16字节我自己的数据),会出现大小为98字节的数据(98字节是因为有66字节的TCP和IP头等,外加两个16字节的自己的数据)。如下图所示:

这时就想起了关闭TCP中的Nagle算法。于是在我的TCP发送的Socket程序中加入如下代码(记得还要导入头文件: #include ):

/* Disable the Nagle (TCP No Delay) algorithm */

//sock_cli是自己定义的socket套接字

int flag = 1;

int ret = setsockopt( sock_cli, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) );

if (ret == -1) {

printf("Couldn‘t setsockopt(TCP_NODELAY)\n");

exit(-1);

}

重新编译并且运行,抓包后如下图所示:

可以发现不会在出现小分组等待的现象,说明关闭了Nagle算法。

在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法相关推荐

  1. win7或win2008系统中,出现【已停止工作,联机检查解决方案并关闭该程序,关闭程序】解决方法!

    win7或win2008系统中,出现[已停止工作,联机检查解决方案并关闭该程序,关闭程序]解决方法! 经过摸索,点击[控制面板]-[操作中心]-[更改操作中心设置]-[问题报告设置]-[从不检查解决方 ...

  2. android屏蔽系统按键精灵,安卓按键精灵的,关闭app程序问题!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Dim txf txf = Chr("10") //跳行符 Call 判断正在运行的程序() Sub 判断正在运行的程序() Dim ...

  3. html中如何屏蔽一段代码,html中如何使用python屏蔽一些基本功能(示例代码)

    进行数据解析的理由不计其数,相关的工具和技巧也同样如此.但是,当您需要用这些数据做一些新的事情时,即使有"合适的"工具可能也是不够的.这一担心对于异类数据源的集成同样存在.用来做这 ...

  4. java中怎么判断一段代码时线程安全还是非线程安全_Java 中的多线程你只要看这一篇就够了...

    引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...

  5. vscode中怎样格式化js代码_如何在Visual Studio代码(VSCode)中格式化代码

    回答(30) 2 years ago 对于那些想要自定义要格式化的JavaScript文件的人,可以使用 JSfiles 属性上的任何扩展名同样适用于HTML . { "beautify.o ...

  6. 计算机网络sequence number,TCP协议中SequenceNumber和Ack Numbe

    Sequence Number lzyws7393074532892018-04-25 Number Sequence qq_391789932452017-09-21 理解TCP序列号(Sequen ...

  7. TCP连接中启用和禁用TCP_NODELAY有什么影响?

    TCP/IP协议中针对TCP默认开启了Nagle算法.Nagle算法通过减少需要传输的数据包,来优化网络.在内核实现中,数据包的发送和接受会先做缓存,分别对应于写缓存和读缓存. 启动TCP_NODEL ...

  8. win7oracle启动服务,如何快速启动/关闭Win7系统中的oracle服务

    如何快速启动/关闭Win7系统中的oracle服务  在我们使用开发系统的时候,我们就需要使用到oracle数据库,在我们使用的Win7系统重装中都会有一个oracle服务,通常这个服务都是关闭的.如 ...

  9. R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值、值标签定位在geom_col堆叠的条形图中的每个条形段的中间

    R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值.值标签定位在geom_col堆叠的条形图中的每个条形段的中间 目录

最新文章

  1. 新一代数据中心:多层级混合设计与标准化评估
  2. 【正则表达式1】C++11正则表达式
  3. Matlab某医院用光电比色计,数理统计答案(研究生).ppt
  4. 重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...
  5. 【c++】映射表std::map
  6. 深入Atlas系列:综合示例(1) - 调用服务器端方法时直接获得客户端具体类型...
  7. PN序列自相关特性分析
  8. Word多级标题出现黑块的解决思路
  9. 美林投资时钟与大类资产配置
  10. 关于医学影像中的轴位面(横断面)、冠状面、矢状面的解释
  11. 如何配置Web服务器?web服务器配置方法步骤
  12. 颜色代码:网页颜色代码大全及色彩搭配教程
  13. SS14 SS34如何区分正负极
  14. 还在纠结程序员能不能干一辈子吗?有答案了!!
  15. CSharp + OpenCvSharp实现医学图像拼接
  16. 服务器硬件与 Linux 初体验
  17. oracle中子查询的执行顺序是,Oracle sql语句执行顺序
  18. 【shell】电信免费200M一键提速脚本 转载
  19. 如何解决Intel SCS Can not create AD AMT Object error
  20. nodejs+vue宠物用品商城网站python php java

热门文章

  1. 【.NET Core项目实战-统一认证平台】第一章 功能及架构分析
  2. 选择IT事业,意味着终身学习
  3. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
  4. django12:form 组件/渲染标签/数据校验/钩子函数/
  5. 【QGIS入门实战精品教程】2.2:QGIS软件的下载与安装(Windows)
  6. 【QGIS入门实战精品教程】4.4:QGIS如何将点自动连成线、线生成多边形?
  7. 【Envi风暴】Envi5.4经典安装图文教程
  8. React Native之导出
  9. linux c之fdopen(int fd, const char *type)使用总结
  10. Tree前序反序列化