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

在写完关于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标志。谁能解释这个原因是什么?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 优先级必须为整数,进程友好性(优先级)设置对Linux没有影响

您看到的行为几乎可以肯定是因为Linux 2.6.38(2010年)中添加了自动组功能.据推测,当您描述运行这两个命令时,它们在不同的终端窗口中运行.如果你在同一个终端窗口中运行它们,那么你应该看到nice值有效.这个答案的其余部分详细阐述了这个故事.内核提供了一种称为自动分组的功能,…

欧框语言框架标准C2,CEFR欧洲语言共同参考框架

http://www.v4.cc/News-3997660.htmlCEFR全称是Common European Framework of Reference for Languages,是由欧洲语言测试者协会(ALTE)于2001年首次发布的一套建议标准,用来评估语言学习者在所学语言的成就,同时也给予一个教育上的评估方针。…

车羊问题c语言编程,C语言-人狼羊菜问题-最容易看懂的解决方法及代码

题目描述:农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请…

c语言简短的泡沫排序法编程,冒泡排序--简单(c语言)

//// main.cpp// bubble//// Created by duanqibo on 2019/7/17.// Copyright © 2019年 duanqibo. All rights reserved.// 冒泡排序 c语言#include #include #include #include #define N 4typedef struct student{int num;char name[20];char sex[2];int age;}stu[…

c语言求a1到an的和,C语言菜鸟基础教程之a++与++a

(一)a在C语言或其它语言中,符号表示“自加”,就是变量在原来的基础上加1。例1:a 0;a;则此时a的值为1。同样的道理,--表示”自减”。例2:a 100;a--;则此时a的值为99。注意,程序语言里没有”自乘”和”自除…

c语言 u16 printf,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)...

u16首先必须知道u8,s8等数据类型的定义:typedef signed char s8;typedef unsigned char u8;typedef signed short s16;typedef unsigned short u16;typedef signed int s32;typedef unsigned int u32;typedef signed long long s64;typedef unsigned long long u64;…

算法与数据结构c语言版PPT,C语言算法与数据结构.ppt

C语言算法与数据结构.ppt第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解。历次试题分值在04分之间波动。,12.1.1 考点1 算法的定义,算法是…

android 应用自动重启,Android 应用崩溃后自动重启的方法

public class HKApplication extends Application {private List activityList new ArrayList();Overridepublic void onCreate() {super.onCreate();// 以下用来捕获程序崩溃异常if (!Config.debug) {Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃…

android+自定义版本号,Android打包版本号设置方法

之前没有设置过打包的命名,每次打包都是默认的"app-realease.apk",之后手动修改名字来显示出它是一个新版本。晚上学习了如何配置打包名称,很简单,修改build.gradle里的代码就行。详细记录如下:1、打开app这…

android工程师饱和,Android开发是否饱和了?你所不了解的Android开发

原标题:Android开发是否饱和了?你所不了解的Android开发Android开发是否饱和了?是很多人关心的问题,对于想要从事Android开发的人更是头等大事。如今,就业难成横亘在求职者面前的难题,而与 之相反是互联网行业的高薪多…

android的读取xml配置文件,android中XMl文件的读取

废话不多说了直接上代码:新建一个Xml文件用于读取:test.xmljavaEclipseSwiftXcodeC#Visual Studio后台:import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Log;import android.widget.TextView…

android 获取wifi的加密类型,wifi加密类型

最近开发wifi方面的功能,需要根据wifi加密类型来展现UI。遇到了一个比较蛋疼的问题:如何判断wifi加密类型wifi的管理需要通过WifiManager来操作WifiManager mWifiManager (WifiManager) context.getSystemService(Context.WIFI_SERVICE);开启和关闭wifi…

android编译的tool版本有多少,macOS Mojave(10.14.2)系统上编译LunarG/VulkanTools工程的Android版本...

$ cd ~$ git clone https://github.com/LunarG/VulkanTools.git$ cd VulkanTools$ cd build-android$ export ANDROID_SDK_HOME~/Library/Android/sdk$ export ANDROID_NDK_HOME~/Library/Android/sdk/ndk-bundle# 当前的版本需要Android SDK 23.0.0,但是需要Java 11以下版本的…

android底部导航栏软件,三步搞定android应用底部导航栏

很多android应用底部都有一个底部导航栏,方便用户在使用过程中随意切换。目前常用的做法有三种:一种是使用自定义tabHost,一种是使用activityGroup,一种是结合FrameLayout实现。笔者再做了多款应用后,为了节约开发周期&#xff0c…

html列表滑动字母索引,js实现做通讯录的索引滑动显示效果和滑动显示锚点效果...

只做实现。。完全没考虑性能优化。所以我实现了以后特别卡。第一个是在通讯录右边的索引条上进行滑动,滑动到相应字母就跳转到相应字母的锚点上。思路:监听touchmove事件,获取clientX和clientY,传入到elementFromPoint&#xff0c…

html一行中怎么写空格,html – 用一行填写空格

如何创建一个下划线,填充文本行末尾和DIV宽度结束之间的空白区域.我正在尝试以下方法:我希望当屏幕变小时,产品线会中断.我希望价格保持在右边,并加下划线.最后一个单词(Mayo)和价格之间的空格必须自动填充下划线.大屏幕:老奶酪 – 沙拉,牛油果,鸡蛋,草药…

android 屏幕飘动,Android自定义View实现飘动的叶子效果(三)

上一篇对自定义View及一些方法有所了解,下面做一个简单的叶子飘动的例子主要技术点1、添加背景图片canvas.drawBitmap()2、Matrix动画类3、Matrix添加到画布上步骤1、添加黄色背景颜色public LeafView(Context context, AttributeSet attrs) {super(context, attrs)…

html加入购物车的动画,vue实现加入购物车动画

预备基础整体思路定义商品列表,设置点击的元素(点击后触发加入购物车的函数addToShopCart)注:这里要把$event传递过去,方便得到target定义一个component用来放购物车和运动的小球定义一个component用来放运动的小球,里面包含多个b…

html 美化input file,Input[type=”file”] 显示效果美化方法 | 智慧宫

Html中input可以作为上传图片代码如下但是演示非常不好看,下面做一番美化处理,效果如下:文件上传美化前后对比美化方法隐藏 input 标签使用 label 标签在input标签位置显示;用js获取 input 中上传的文件名称,并在 labl…

html 进入效果,用css3实现简单的进入效果

这是一个比较简单的小例子,实现如图效果仅仅用css3就可以达到这种效果,代码如下:.div {position: relative;top: 20px;height: 300px;width: 200px;margin: 0 auto;background: blue;float: left;margin-left: 20px;}.div2 {position: relati…