日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2024/8/23 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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標志。誰能解釋這個原因是什么?

總結

以上是生活随笔為你收集整理的linux tcp cork,在此用例中,TCP_CORK和TCP_NODELAY是否有显着差异?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。