SO LINGER和優雅關閉連線

2021-09-23 00:00:52 字數 549 閱讀 1191

當呼叫closesocket關閉套接字時,so_linger將決定系統如何處理殘存在套接字傳送佇列中的資料。處理方式無非兩種:丟棄或者將資料

繼續傳送至對端,優雅關閉連線。事實上,so_linger並不被推薦使用,大多數情況下我們推薦使用預設的關閉方式(即下方**中的第一種情況)。

struct linger 

linger; 

l_onoff

l_linger

closesocket行為

傳送佇列

底層行為零忽略

立即返回。

保持直至傳送完成。

系統接管套接字並保證將資料傳送至對端。非零零

立即返回。

立即放棄。

直接傳送rst包,自身立即復位,不用經過2msl狀態。對端收到復位錯誤號。

非零非零

阻塞直到l_linger時間超時或資料傳送完成。(套接字必須設定為阻塞zhuan)

在超時時間段內保持嘗試傳送,若超時則立即放棄。

超時則同第二種情況,若傳送完成則皆大歡喜。

TCP中的優雅關閉和非優雅關閉

優雅關閉 其實就是正常的四次揮手 非優雅關閉 向對端傳送乙個rst報文直接進入closed狀態 伺服器為了避免太多time wait的關閉方式 1.保證由客戶端主動發起關閉 2.關閉的時候使用rst的方式 3.對處於time wait狀態的tcp允許重用 一般我們當然最好是選擇第一種方式,實在沒有辦...

優雅的關閉socket

我們在利用iocp 完成埠 進行程式設計的時候,經常要關閉一些不滿足條件的套接字。假如我們直接採用closesocket方法進行關閉的話,繫結到io埠的此套接字的未傳送的資料就會丟失,這種情況是我們不願意發生的。下面介紹一種合理關閉此套接字的方法 首先,利用setsockopt msdn 函式設定套...

優雅地斷開套接字連線 套接字半關閉

呼叫close函式斷開連線,意味著完全斷開連線,不僅無法傳輸資料,而且也不能接收資料。兩台主機通過套接字建立連線後進入可交換資料的狀態。把建立套接字後可交換資料的狀態看作一種流。為了實現雙向通訊,套接字生成的兩個流。shutdown函式關閉其中乙個流。呼叫上述函式時,第二個引數決定斷開連線的方式 s...