2017-06-12 64 views
-2

我有一個C++服務器和客戶端。服務器和套接字均報告ECONNRESET。這是怎麼回事?

我正在使用poll()系統調用來監視服務器上的套接字以進行讀取,寫入和錯誤。

對於某些連接,我發現poll()在發送一堆數據並在中途失敗後檢測到一個ECONNRESET。在客戶端,我也看到一個ECONNRESET被報告。

所以基本上雙方都報告說遠程端關閉了連接。

這是怎麼發生的? 如何調試?是否有任何我可以啓用的tcp層日誌記錄?

+2

你有權訪問Wireshark來記錄數據包跟蹤並查看網絡上發生了什麼? – user4581301

+1

可能有很多原因可能會發生,我建議使用wireshark,如上面評論中所述。 –

+0

請發貼[mcve]。 –

回答

1

是否有任何可以啓用的tcp層日誌記錄?

使您能夠看到低級別IP傳輸通道發生了什麼的最常用工具是Wireshark

您可以使用該工具詳細檢查通過您的NIC發送和接收的任何數據包。

另一個是針對linux系統的tcpdump

+0

不幸的是,這是在一個有很多服務器的測試環境中。我無法控制機器。 即使我確實如何在發生此問題時準確捕獲數據包。 – siri

+0

@siri您只需要控制客戶端計算機以觀察流量。 –

+0

我有很多流量通過該機器。這個問題有時只會發生。即使在完整傳輸後的成功案例中,也有很多連接和所有連接都檢測到套接字錯誤104。只有在某些情況下,我可以看到在傳輸過程中雙方都重置了連接。我如何使用tcpdump來捕獲這種情況? – siri