0
我正在學習tcp-ip協議棧,服務器端與客戶端的連接。我寫了一個簡單的客戶服務器。客戶端和服務器能夠在沒有任何問題的情況下將數據傳輸給對方。我在同一臺機器上運行客戶端和服務器。當我用ctrl + c關閉服務器時,我發現內核正在發送RST信號而不是FIN。 (請參考我的問題:Active closure of server sockets)服務器發送復位信號而不是FIN
稍微調查一下,我意識到我的一個客戶端正在讀取調用,並且相應的服務器線程處於無限循環中無所事事(我的部分有些bug)。但是當我刪除那無限的while循環時,我看到了預期的行爲。我可以看到FIN在兩個方向發送。
所以,我想知道爲什麼tcp層在第一種情況下發送RST。
如果你從鏈接問題中看到我的tcpdump,那麼就沒有FIN數據包。所以,似乎像服務器端插座永遠不會發送FIN – user2026599
最終誰放棄?哪裏有同行不接受數據的證據? – EJP
最終發送數據的一方放棄嘗試優雅的關閉。同行沒有接受數據,因爲它被困在無盡的循環中。此時,發送方將發送RST,而另一方的讀取將返回錯誤。 –