如何設定 Socket 超時 (Timeout)?
請問 Socket 預設超時時間是?要如何設定 Socket 連接超時? 傳送超時? 接送超時?
補充一下,我在 msdn 找很久,但我發現原來這個不是那麼簡單的問題,很多人都有這個問題的樣子...
我提供一下我目前找到的一些資料..
//設定傳送超時 (微秒)
this.ProxySocket.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 5000);
//設定接收超時 (微秒)
this.ProxySocket.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);
//設定連接超時 (Timeout 是微秒,但我測試的結果有時候可以 Timeout,有時候還是必須等到 .NET 預設值才會丟出 Timeout 例外..)
if (!this.ProxySocket.Poll (5000000, SelectMode.SelectError)) {
//強制拋出例外..
throw new Exception ("Connect Timeout");
}
結論:還是沒辦法...orz
請各方高手幫忙
謝謝 --------------------编程问答-------------------- 等了好久都沒人回答,難道真的沒有人會嗎? 還是高手不削回答呢?
我本以為 C# 是新語言各方面支援程度應該都很高階的,
可是連 Socket 的 Timeout 設定都那麼難..orz
求助><~ --------------------编程问答-------------------- 推 --------------------编程问答-------------------- DateTime start = DateTime.Now;
while(true)
{
if(((TimeSpan)(DateTime.Now - start)).Seconds == yourTimeOut)
{
//handle timeout
break;
}
else
{
//go on your code...
}
} --------------------编程问答-------------------- 你的意思是要我在 socket 連線之前開一個線程執行迴圈去讀秒數嗎? 然後如果超時再從子線程裡面把 socket 關閉? 或是自已強制拋出例外再處理...???
這樣聽起來好像是可行的,但其實會有更多問題要克服的,我不想這樣做,而且我也相信 c# 那麼強大的高階程式語言,不可能連 timeout 都沒有沒辦法設定..
如果連超時都沒有支援的話,還能自稱 .net 嗎? --------------------编程问答-------------------- 內地高手如雲,怎麼會沒人願意解答呢? 難道是我的問題太簡單高手都不削回答嗎? --------------------编程问答-------------------- 我也不会设置
补充:.NET技术 , C#