一個怪異的服務器問題

最近幫一個朋友測試服務器,其中一個測試項目是每次傳送數據後立刻斷開連接。然而測試開始沒幾 分鐘,客戶端就報告了大量的錯誤,錯誤原因是 only one usage of each socket address (protocol/network address/port) is normally permitted”. 用 netstat 查看客戶端的連接情況,發現有大量的狀態爲 TIME_WAIT 的連接存在。Google 以後確定 原因在於 TCP 會在關閉 Socket 之後繼續佔用端口一段時間,在這段時間內,如果要創建新的連接, Socket 會分配一個新端口給它。 這取決於兩個註冊表值,都是位於這個鍵下: HKLM/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters TcpTimedWaitDelay 表示關閉 Socket 後佔用端口的秒數,默認是240 MaxUserPort 表示最大的可用端口,默認是 5000 如果發送請求的速度是 300/秒,那麼5000個端口(實際上還要扣掉1024個保留端口)只能用14秒左右 ,從第15秒開始就沒有可用端口,因此 WinSock 就要報錯了。 推薦的修改值爲 TcpTimedWaitDelay = 30 MaxUserPort = 65534

 轉:http://www.cpper.com/site/comments/tcp_time_delay/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章