![](/img/trans.png)
[英]Why is there TCP RST packet after sending a string and closing a socket
[英]Why is one endpoint of this TCP connection sending a packet with the RST flag?
我正在編寫一個嘗試執行以下操作的應用程序:
這就是問題所在。 當我嘗試運行該應用程序時,TCP交換如下所示:
前三個數據包建立三向握手 ,第四個和第五個數據包是服務器寫入的數據的傳輸及其確認。
如預期的那樣,服務器套接字發送一個設置了FIN
標志的數據包,以指示它正在關閉其連接的末尾。 客戶端確認這一點,然后嘗試將其數據寫入套接字。 服務器立即發送RST
數據包,過早終止連接。
為什么會這樣?
注意:以上捕獲是在Windows 8.1上完成的。
發送者無法在[FIN]之后發送數據。 這樣的動作將導致接收機發出[RST]。
FIN可能表明服務器已雙向完全關閉連接。 在這種情況下,如果它在連接上收到任何其他數據,它將發出RST。 這表明您有應用程序協議錯誤。 如果服務器發送答復然后關閉套接字,則客戶端無法通過該連接發送任何其他內容。
可能需要服務器使用SHUT_WR
調用shutdown()
,然后在關閉套接字之前從客戶端讀取其他內容。 也許您只是做錯了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.