SO_LINGER和優(yōu)雅關(guān)閉連接
轉(zhuǎn)載自:http://unliminet.blog.51cto.com/380895/346686當調(diào)用closesocket關(guān)閉套接字時,SO_LINGER將決定系統(tǒng)如何處理殘存在套接字發(fā)送隊列中的數(shù)據(jù)。處理方式無非兩種:丟棄或者將數(shù)據(jù)繼續(xù)發(fā)送至對端,優(yōu)雅關(guān)閉連接。事實上,SO_LINGER并不被推薦使用,大多數(shù)情況下我們推薦使用默認的關(guān)閉方式(即下方表格中的第一種情況)。
下方代碼段顯示linger結(jié)構(gòu)語法,表格為不同參數(shù)情況下的套接字行為。






l_onoff | l_linger | closesocket行為 | 發(fā)送隊列 | 底層行為 |
零 | 忽略 | 立即返回。 | 保持直至發(fā)送完成。 | 系統(tǒng)接管套接字并保證將數(shù)據(jù)發(fā)送至對端。 |
非零 | 零 | 立即返回。 | 立即放棄。 | 直接發(fā)送RST包,自身立即復位,不用經(jīng)過2MSL狀態(tài)。對端收到復位錯誤號。 |
非零 | 非零 | 阻塞直到l_linger時間超時或數(shù)據(jù)發(fā)送完成。(套接字必須設(shè)置為阻塞zhuan) | 在超時時間段內(nèi)保持嘗試發(fā)送,若超時則立即放棄。 | 超時則同第二種情況,若發(fā)送完成則皆大歡喜。 |
可參考的資料:
http://msdn.microsoft.com/en-us/library/ms737582(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms739165(v=VS.85).aspx
http://blog.csdn.net/factor2000/archive/2009/02/23/3929816.aspx
本文出自 “一網(wǎng)無垠” 博客,請務(wù)必保留此出處http://unliminet.blog.51cto.com/380895/346686