當呼叫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...