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