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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux so_nosigpipe,TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL设置

發(fā)布時(shí)間:2023/12/13 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux so_nosigpipe,TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL设置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

下面是TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL的設(shè)置方法:

其中由于平臺(tái)的不同,區(qū)分SO_NOSIGPIPE和MSG_NOSIGNAL有所分區(qū):

int optval = 1;

// turn off SIGPIPE signal

#ifdef __linux__

setsockopt(m_Sockfd, SOL_SOCKET, MSG_NOSIGNAL, &optval, sizeof(optval));

#else

setsockopt(m_Sockfd, SOL_SOCKET, SO_NOSIGPIPE, &optval, sizeof(optval));

#endif

// set SO_LINGER so socket closes gracefully

struct linger ling;

ling.l_onoff = 1;

ling.l_linger = 10;

setsockopt(m_Sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));

// disable the Nagle algorithm so that small packets get sent immediately

int flag = 1;

setsockopt(m_Sockfd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(int));

另外轉(zhuǎn)載一篇:

setsockopt設(shè)置 SO_LINGER 選項(xiàng)

此選項(xiàng)指定函數(shù)close對(duì)面向連接的協(xié)議如何操作(如TCP)。內(nèi)核缺省close操作是立即返回,如果有數(shù)據(jù)殘留在套接口緩沖區(qū)中則系統(tǒng)將試著將這些數(shù)據(jù)發(fā)送給對(duì)方。

SO_LINGER選項(xiàng)用來改變此缺省設(shè)置。使用如下結(jié)構(gòu):

struct linger {

int l_onoff; /* 0 = off, nozero = on */

int l_linger; /* linger time */

};

有下列三種情況:

1、設(shè)置 l_onoff為0,則該選項(xiàng)關(guān)閉,l_linger的值被忽略,等于內(nèi)核缺省情況,close調(diào)用會(huì)立即返回給調(diào)用者,如果可能將會(huì)傳輸任何未發(fā)送的數(shù)據(jù);

2、設(shè)置 l_onoff為非0,l_linger為0,則套接口關(guān)閉時(shí)TCP夭折連接,TCP將丟棄保留在套接口發(fā)送緩沖區(qū)中的任何數(shù)據(jù)并發(fā)送一個(gè)RST給對(duì)方,而不是通常的四分組終止序列,這避免了TIME_WAIT狀態(tài);

3、設(shè)置 l_onoff 為非0,l_linger為非0,當(dāng)套接口關(guān)閉時(shí)內(nèi)核將拖延一段時(shí)間(由l_linger決定)。如果套接口緩沖區(qū)中仍殘留數(shù)據(jù),進(jìn)程將處于睡眠狀態(tài),直到(a)所有數(shù)據(jù)發(fā)送完且被對(duì)方確認(rèn),之后進(jìn)行正常的終止序列(描述字訪問計(jì)數(shù)為0)或(b)延遲時(shí)間到。此種情況下,應(yīng)用程序檢查close的返回值是非常重要的,如果在數(shù)據(jù)發(fā)送完并被確認(rèn)前時(shí)間到,close將返回EWOULDBLOCK錯(cuò)誤且套接口發(fā)送緩沖區(qū)中的任何數(shù)據(jù)都丟失。close的成功返回僅告訴我們發(fā)送的數(shù)據(jù)(和FIN)已由對(duì)方TCP確認(rèn),它并不能告訴我們對(duì)方應(yīng)用進(jìn)程是否已讀了數(shù)據(jù)。如果套接口設(shè)為非阻塞的,它將不等待close完成。

注釋:l_linger的單位依賴于實(shí)現(xiàn): 4.4BSD假設(shè)其單位是時(shí)鐘滴答(百分之一秒),但Posix.1g規(guī)定單位為秒。

下面的代碼是一個(gè)使用SO_LINGER選項(xiàng)的例子,使用30秒的超時(shí)時(shí)限:

#define TRUE???? 1

#define FALSE??? 0

int z; /* Status code

*/ int s;?????? /* Socket s */

struct linger so_linger;

...

so_linger.l_onoff = TRUE;

so_linger.l_linger = 30;

z = setsockopt(s,

SOL_SOCKET,

SO_LINGER,

&so_linger,

sizeof so_linger);

if ( z )

perror("setsockopt(2)");

下面的例子顯示了如何設(shè)置SO_LINGER的值來中止套接口s上的當(dāng)前連接:

#define TRUE???? 1

#define FALSE??? 0

int z; /* Status code */

int s;?????? /* Socket s */

struct linger so_linger;

...

so_linger.l_onoff = TRUE;

so_linger.l_linger = 0;

z = setsockopt(s,

SOL_SOCKET,

SO_LINGER,

&so_linger,

sizeof so_linger);

if ( z )

perror("setsockopt(2)");

close(s); /* Abort connection */

在上面的這個(gè)例子中,當(dāng)調(diào)用close函數(shù)時(shí),套接口s會(huì)立即中止。中止的語義是通過將超時(shí)值設(shè)置為0來實(shí)現(xiàn)的。

/********** WINDOWS **********/

/* 當(dāng)連接中斷時(shí),需要延遲關(guān)閉(linger)以保證所有數(shù)據(jù)都被傳輸,所以需要打開SO_LINGER這個(gè)選項(xiàng);

*?//注:大致意思就是說SO_LINGER選項(xiàng)用來設(shè)置當(dāng)調(diào)用closesocket時(shí)是否馬上關(guān)閉socket;

* linger的結(jié)構(gòu)在/usr/include/linux/socket.h中定義://注:這個(gè)結(jié)構(gòu)就是SetSocketOpt中的Data的數(shù)據(jù)結(jié)構(gòu)

*  struct linger

*  {

*   int l_onoff;  /* Linger active */ ? ? ? //低字節(jié),0和非0,用來表示是否延時(shí)關(guān)閉socket

*   int l_linger; /* How long to linger */ ? //高字節(jié),延時(shí)的時(shí)間數(shù),單位為秒

*  };

*  如果l_onoff為0,則延遲關(guān)閉特性就被取消。

*?? 如果非零,則允許套接口延遲關(guān)閉; l_linger字段則指明延遲關(guān)閉的時(shí)間

*/

更具體的描述如下:

1、若設(shè)置了SO_LINGER(亦即linger結(jié)構(gòu)中的l_onoff域設(shè)為非零),并設(shè)置了零超時(shí)間隔,則closesocket()不被阻塞立即執(zhí)行,不論是否有排隊(duì)數(shù)據(jù)未發(fā)送或未被確認(rèn)。這種關(guān)閉方式稱為“強(qiáng)制”或“失效”關(guān)閉,因?yàn)樘捉涌诘奶撾娐妨⒓幢粡?fù)位,且丟失了未發(fā)送的數(shù)據(jù)。在遠(yuǎn)端的recv()調(diào)用將以WSAECONNRESET出錯(cuò)。

2、若設(shè)置了SO_LINGER并確定了非零的超時(shí)間隔,則closesocket()調(diào)用阻塞進(jìn)程,直到所剩數(shù)據(jù)發(fā)送完畢或超時(shí)。這種關(guān)閉稱為“優(yōu)雅”或“從容”關(guān)閉。請(qǐng)注意如果套接口置為非阻塞且SO_LINGER設(shè)為非零超時(shí),則closesocket()調(diào)用將以WSAEWOULDBLOCK錯(cuò)誤返回。

3、若在一個(gè)流類套接口上設(shè)置了SO_DONTLINGER(也就是說將linger結(jié)構(gòu)的l_onoff域設(shè)為零),則closesocket()調(diào)用立即返回。但是,如果可能,排隊(duì)的數(shù)據(jù)將在套接口關(guān)閉前發(fā)送。請(qǐng)注意,在這種情況下WINDOWS套接口實(shí)現(xiàn)將在一段不確定的時(shí)間內(nèi)保留套接口以及其他資源,這對(duì)于想用所以套接口的應(yīng)用程序來說有一定影響。

SO_DONTLINGER?若為真,則SO_LINGER選項(xiàng)被禁止。

SO_LINGER延遲關(guān)閉連接?struct linger上面這兩個(gè)選項(xiàng)影響close行為;

選項(xiàng) ? ? ? ? ? ? ? ? ? ? ? 間隔 ? ? ? ? 關(guān)閉方式 ? ?等待關(guān)閉與否

SO_DONTLINGER???不關(guān)心???? 優(yōu)雅 ? ? ? ? ? 否

SO_LINGER ? ? ? ? ? ? 零 ? ? ? ? ? ? 強(qiáng)制 ? ? ? ? ?否

SO_LINGER ? ? ? ? ? ? 非零 ? ? ? ? 優(yōu)雅 ? ? ? ? ?是

參考:http://blog.csdn.net/factor2000/article/details/3929816

總結(jié)

以上是生活随笔為你收集整理的linux so_nosigpipe,TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品免费观看视频 | 中文字幕一区二区三区在线不卡 | 免费无遮挡无码永久在线观看视频 | 国产视频一区二区三区在线播放 | 少妇av| 91麻豆精品国产理伦片在线观看 | 国产无限资源 | 日本视频免费在线播放 | 啪啪综合网 | 成人欧美一区 | 麻豆传媒映画官网 | 精品九九九九九 | 91亚洲精品久久久久久久久久久久 | 岛国a视频| 欧美一级α片 | 日韩视频精品一区 | www.黄色. | 99精品久久久久 | 91av在线免费 | 午夜偷拍视频 | 欧美在线高清 | 欧美精品福利 | 日本一区二区三区在线看 | 最新av在线播放 | 国产88av | av激情久久| 欧美无砖专区免费 | 拔插拔插影库 | mm1313亚洲精品 | 天天色综合av | 亚洲系列| 亚洲欧美一区二区精品久久久 | 久久激情免费视频 | 丰满熟女人妻一区二区三 | 日本加勒比一区 | 欧美区在线观看 | 日本福利一区二区 | 波多野吉衣一二三区乱码 | 中文字幕 成人 | 日韩福利视频一区 | 在线小视频 | 男人和女人插插 | 9i在线看片成人免费 | 长河落日电视连续剧免费观看01 | 制服.丝袜.亚洲.另类.中文 | 久草这里只有精品 | 国产精品三级在线 | 真实的国产乱xxxx在线91 | 九色91视频 | 99精品欧美一区二区三区综合在线 | 国产在视频线精品视频 | 色av影院| 黄色免费一级 | 精品视频在线一区 | 国产精品99久久久久久久久 | 亚洲婷婷丁香 | 色综合色综合网色综合 | 殴美一级黄色片 | 国模视频一区二区 | 亚洲大胆视频 | 777午夜| 亚洲4区 | 看污片网站 | 免费黄色片子 | 超碰97国产在线 | 综合成人 | 自拍第一区| 色婷婷九月 | 美女在线播放 | 91国在线观看 | 538精品一线 | www.九九九 | 中文字幕在线国产 | 幸福,触手可及 | 中文文字幕文字幕高清 | 成人综合影院 | 狠狠干天天 | 一个人在线观看www软件 | wwwxxxx日本| 成人免费在线观看网站 | 99热精品在线 | 男女互操视频 | 中文字幕日韩无 | 免费啪啪小视频 | 噼里啪啦免费高清看 | 欧美激情片在线观看 | 成人不卡视频 | 91激情影院 | 九九九在线观看 | 91九色国产ts另类人妖 | 成人日韩欧美 | 粉嫩av网 | 欧美aa视频 | 波多野结衣免费视频观看 | 久久精品国产亚洲av麻豆图片 | 日韩av成人在线观看 | 在线观看中文字幕第一页 | 天天躁日日躁狠狠躁av麻豆男男 | 久久久久久久一区二区 |