關於SO LINGER 設定

2021-06-08 09:32:04 字數 721 閱讀 3897

tcp連線斷開的時候呼叫closesocket函式,已經討論過有優雅的斷開和強制斷開,那麼如何設定斷開連線的方式呢?是通過設定socket描述符乙個linger結構體屬性。

linger結構體資料結構如下:

struct linger

int l_onoff;

int l_linger;

有三種組合方式:

第一種

l_onoff = 0;

l_linger忽略

這種方式下,就是在closesocket的時候立刻返回,底層會將未傳送完的資料傳送完成後再釋放資源,也就

是優雅的退出。

第二種l_onoff非零

l_linger = 0;

這種方式下,在呼叫closesocket的時候同樣會立刻返回,但不會傳送未傳送完成的資料,而是通過乙個rest包強制的關閉socket描述符,也就是強制的退出。

第三種l_onoff非零

l_linger > 0

這種方式下,在呼叫closesocket的時候不會立刻返回,核心會延遲一段時間,這個時間就由l_linger得值來決定。如果超時時間到達之前,傳送完未傳送的資料(包括fin包)並得到另一端的確認,closesocket會返回正確,socket描述符優雅性退出。否則,closesocket會直接返回錯誤值,未傳送資料丟失,socket描述符被強制性退出。需要注意的時,如果socket描述符被設定為非堵塞型,則closesocket會直接返回值。

關於SO LINGER 設定

tcp連線斷開的時候呼叫closesocket函式,已經討論過有優雅的斷開和強制斷開,那麼如何設定斷開連線的方式呢?是通過設定socket描述符乙個linger結構體屬性。linger結構體資料結構如下 struct linger 有三種組合方式 第一種 l onoff 0 l linger忽略 這...

關於SO LINGER的使用說明

so linger 此選項指定函式close對面向連線的協議如何操作 如tcp 預設close操作是立即返回,如果有資料殘留在套介面緩衝區中則系統將試著將這些資料傳送給對方。so linger選項用來改變此預設設定。使用如下結構 struct linger 有下列三種情況 l onoff為0,則該選...

SO LINGER選項解釋

so linger作用 設定函式close 關閉tcp連線時的行為。預設close 的行為是,如果有資料殘留在socket傳送緩衝區中則系統將繼續傳送這些資料給對方,等待被確認,然後返回。利用此選項,可以將此預設行為設定為以下兩種 a.立即關閉該連線,通過傳送rst分組 而不是用正常的fin ack...