簡體   English   中英

Tcp連接掛起CLOSE_WAIT狀態

[英]Tcp connections hang on CLOSE_WAIT status

客戶端首先關閉套接字,當服務器沒有太多數據時,tcp連接關閉就好了:

FIN -->
   <-- ACK
   <-- FIN, ACK
ACK -->

當服務器忙於發送數據時:

FIN -->
    <-- ACK,PSH
RST -->

並且服務器連接進入CLOSE_WAIT狀態並在那里掛了很長時間。

這有什么問題? 客戶相關或服務器相關? 這種情況發生在Redhat5上,用於本地套接字。

本文討論為什么發送“RST”,但我不知道為什么服務器連接卡在CLOSE_WAIT上,並且不發送FIN。

[編輯]我忽略了最重要的信息,這發生在qemu的slirp網絡仿真上。 這似乎是處理密切連接的slirp bug的問題。

這意味着流中還有未讀數據,客戶端尚未完成讀取。

您可以使用SO_LINGER選項強行關閉它。 以下是相關文件的Linux(另見選項本身, 在這里 ),和[這里的匹配函數2]為Win32。

它是服務器端保持打開狀態,所以在服務器端你可以嘗試禁用SO_LINGER

這可能意味着服務器尚未關閉套接字。 您可以通過使用“lsof”列出由該進程打開的文件描述符(包括TCP套接字)來輕松告訴您。 解決方法是讓進程在完成時始終關閉套接字(即使在錯誤情況下等)

這是qemu的一個已知缺陷

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM