我有一個C#應用程序已運行好幾年了。它通過TCP/IP套接字連接到發送股票交易執行的機器。套接字一端連接,防火牆?
最近,我試圖將它部署到位於硬件防火牆後面的新數據中心中的某些機器上,並且我已經開始看到一些奇怪的斷開連接。
當發生斷開連接時,在我的應用程序(客戶端)中,除了停止通過套接字接收數據外,沒有任何異常。當我在調試器中停止它時,Wireshark確認沒有數據到達套接字,並且我的應用程序的接收線程在Receive()調用上被阻塞。套接字在netstat中顯示爲ESTABLISHED。
但是從服務器端來看,它看起來像我的客戶端正在斷開連接。看看它們的日誌,看起來它們的端點通常以(nRecvd = -1,errno = 104)或(nRecvd = 0,errno = 11)結束。 (104由同級重置連接)。
斷開似乎只發生在一段時間的活動之後。我現在通過在我的客戶端和他們的服務器之間實現心跳來解決這個問題,該服務器每20秒發送一條短消息並獲得答覆。這導致過去幾天斷開連接數降到0。
起初,我覺得硬件防火牆是個問題。它導致套接字在活動之後超時。但防火牆負責人聲稱,此端口上的連接超時(8887)爲2160分鐘。
我正在運行Windows Server 2003和.NET 3.5。交易服務器是一臺Linux機器(sles9我相信雖然我不確定)。
關於可能會發生什麼的任何想法?考慮到我無法訪問防火牆日誌並且無法更改交易服務器上的代碼,我該怎麼做才能進行更多的調試?
謝謝, 邁克
謝謝,只是想確保我在賽道與防火牆假設。在從防火牆到交易服務器的路徑上,他們不會爲我捕獲任何東西。最後,它變成了防火牆。儘管我要求10x確認端口號,但他們已經解開了錯誤的端口。 – 2009-09-11 18:19:18