struct linger
?TCP連接斷開(kāi)的時(shí)候調(diào)用close socket函數(shù),已經(jīng)討論過(guò)有優(yōu)雅的斷開(kāi)和強(qiáng)制斷開(kāi),那么如何設(shè)置斷開(kāi)連接的方式呢?
是通過(guò)設(shè)置socket描述符一個(gè)linger結(jié)構(gòu)體屬性。
linger結(jié)構(gòu)體數(shù)據(jù)結(jié)構(gòu)如下:
struct linger { int l_onoff; int l_linger; };???
有三種組合方式:
第一種
??? l_onoff = 0;
??? l_linger忽略
這種方式下,就是在closesocket的時(shí)候立刻返回,底層會(huì)將未發(fā)送完的數(shù)據(jù)發(fā)送完成后再釋放資源,也就是優(yōu)雅的退出.
第二種
??? l_onoff非零
??? l_linger = 0;
這種方式下,在調(diào)用close socket的時(shí)候同樣會(huì)立刻返回,但不會(huì)發(fā)送未發(fā)送完成的數(shù)據(jù),而是通過(guò)一個(gè)REST包強(qiáng)制的關(guān)閉socket描述符,也就是強(qiáng)制的退出。
第三種
??? l_onoff非零
??? l_linger > 0
這種方式下,在調(diào)用close socket的時(shí)候不會(huì)立刻返回,內(nèi)核會(huì)延遲一段時(shí)間,這個(gè)時(shí)間就由l_linger得值來(lái)決定。如果超時(shí)時(shí)間到達(dá)之前,發(fā)送完未發(fā)送的數(shù)據(jù)(包括FIN包)并得到另一端的確認(rèn),close socket會(huì)返回正確,socket描述符優(yōu)雅性退出。
否則,close socket會(huì)直接返回錯(cuò)誤值,未發(fā)送數(shù)據(jù)丟失,socket描述符被強(qiáng)制性退出。
需要注意的時(shí),如果socket描述符被設(shè)置為非堵塞型,則close socket會(huì)直接返回值。
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/springside4/archive/2010/11/11/2481735.html
總結(jié)
以上是生活随笔為你收集整理的struct linger的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 人与自然《食虫猎手-下》
- 下一篇: 牛客假日团队赛5J护城河 bzoj 1
