close socket 後,發送rst包的場景

前幾天解決了一個很棘手的問題:從抓包來看,客戶端收到了rst包,但是我的應用程序無響應的問題,在解決這個問題的過程中,我詳細瞭解了爲啥服務端調用close的時候,客戶端收到的都不是正常的socket的關閉流程(先發FIN包),而是發送一個rst包給客戶端,通過查閱各種資料,發現原來是這樣的:
當程序調用close關閉socket的時候,如果發送緩衝區中仍然有數據的話,協議棧會發送RST包代替FIN包給客戶端.
還有一個場景協議棧會恢復rst包
當我服務端已經將該socket關閉了,但是客戶端未收到關閉的消息,如果客戶端繼續像服務端發送數據的話,服務端的協議棧同樣會給客戶端回覆rst包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章