close socket斷開連線的方式

2022-02-11 23:20:21 字數 1150 閱讀 1656

struct linger

tcp連線斷開的時候呼叫

closesocket

函式,有優雅的斷開和強制斷開兩種方式

. 那麼如何設定斷開連線的方式呢?是通過設定

socket

描述符乙個

linger

結構體屬性。

linger

結構體資料結構如下:

struct 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

會直接返回值。

linux下需要包含標頭檔案

具體用法:

struct linger ling = ;

setsockopt(socketfd, sol_socket, so_linger, (void*)&ling, sizeof(ling));

原文

Tcp 斷開連線

tcp協議規定,對於已經建立的連線,網路雙方要進行四次握手才能成功斷開連線,如果缺少了其中某個步驟,將會使連線處於假死狀態,連線本身占用的資源不會被釋放。網路伺服器程式要同時管理大量連線,所以很有必要保證無用連線完全斷開,否則大量僵死的連線會浪費許多伺服器資源。在眾多tcp狀態中,最值得注意的狀態有...

TCP IP 斷開連線

tcp ip 斷開連線 四次握手 斷開連線其實從我的角度看不區分客戶端和伺服器端,任何一方都可以呼叫close or closesocket 之類 的函式開始主動終止乙個連線。這裡先暫時說正常情況。當呼叫close函式斷開乙個連線時,主動斷開的 一方傳送fin finish報文給對方。有了之前的經驗...

php斷開mysql mysql連線與斷開伺服器

為了連線伺服器,當呼叫mysql時,通常需要提供乙個mysql使用者名稱並且很可能需要乙個 密碼。如果伺服器執行在登入伺服器之外的其它機器上,還需要指定主機名。聯絡管理員以找出進行連線所使用的引數 即,連線的主機 使用者名稱和使用的密碼 知道正確的引數後,可以按照以下方式進行連線 shell mys...