2016-01-28 72 views
0

我有一個Java套接字服務器上運行Windows Server 2008Windows server 2008發送[RST,ACK]數據包,同時幾個客戶端同時請求tcp連接(小於5ms)

當使用多線程客戶端發送在同一時間幾個TCP連接,客戶總是建立了第一個連接後的「errno的111連接被拒絕」的錯誤。

這裏的Wireshark的的捕獲跟蹤(10.1.3.136的服務器,10.34.10.132是客戶端):Trace和特定的紅色曲線放在這裏:Trace2

那麼,有什麼問題?

如果我延遲啓動線程超過5ms,或者使用一個centos作爲服務器,錯誤消失。服務器跟蹤文件中沒有發現異常。

回答

0

問題是您已經填滿了積壓隊列,於是Windows開始發出重置以進一步傳入連接請求。

這可能是因爲您指定了一個小的積壓值,但更可能的原因是您的服務器根本無法足夠快地接受連接:您的接受循環在執行其他操作,如DNS調用甚至I/O與客戶端,所有這些都應該在客戶端的線程中完成。所有的接受循環都應該接受套接字和啓動線程。

+0

我發現ServerSocket的'backlog'配置是1 ....改變它,並且它工作。因此,如果積壓已滿,像Windows這樣的服務器主機將選擇重置連接,而不是服務器應用程序? –

+0

這就是我所說的。 – EJP

相關問題