close_socket中斷連線的方式

來源:互聯網
上載者:User

struct linger

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會直接傳回值。

Linux下需要包含標頭檔<arpa/inet.h>

具體用法:

struct linger ling = {0, 0};

setsockopt(socketfd, SOL_SOCKET, SO_LINGER, (void*)&ling, sizeof(ling));

原文

http://www.cnblogs.com/caosiyang/archive/2012/03/29/2422956.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.