7
我正在處理客戶端連接TCP連接的應用程序,然後觸發大量可能需要大量時間才能完成的工作。如果用戶丟棄TCP連接,則必須取消該工作。正在向網絡流寫入零字節是檢測關閉連接的可靠方法嗎?
目前,我在做什麼正在啓動一個計時器,定期檢查網絡,做這個流的連接:
// stream is a Stream instance
var abort = false;
using (new Timer(x => {
try
{
stream.Write(new byte[0], 0, 0);
}
catch (Exception)
{
abort = true;
}
}, null, 1000, 1000))
{
// Do expensive work here and check abort periodically
}
我也喜歡閱讀CanWrite
,CanRead
或Connected
但他們報告流的最後狀態。寫零字節是測試連接性的可靠方法,還是這可能會導致問題?我無法在流上寫入或讀取任何實際數據,因爲這會弄亂客戶端。
它似乎爲我工作,但我可以看到你的觀點。我並不期望它能夠一路探測,但是如果它有一點點的話,它可能會足夠好。某處必須有某種本地標誌,表示是否存在重置連接?事件或其他事情會非常好。 – Dervall 2012-08-01 09:17:25
@Dervall堆棧知道是否有重置,但我從來沒有見過我的生活中會給你的TCP API。您必須在TCP連接上執行I/O才能獲得錯誤。它的確如此設計:'無撥號音'。構建用於承受中間節點故障和重新路由。 – EJP 2012-08-01 09:22:46