2011-02-10 67 views
0

我正在調用Socket.Select多個套接字,並希望整個線程阻塞,直到一個(或多個)套接字準備就緒。該文件說,如果你給超時-1,超時應該是無限的。然而,它幾乎自動返回。Socket.Select()與-1超時沒有阻止

我正在使用.NET 3.5。這裏是我的代碼:

Socket.Select(socketAVerifier, null, null, -1); 

    foreach (var socketsPrets in socketAVerifier) 
    { 
     switch (socketsPrets.ProtocolType) 
     { 
      case ProtocolType.Tcp: 
       AccepterConnection(); 
      break; 
      case ProtocolType.Udp: 
       EcouterBroadcast(); 
      break;       
      default: 
       Journal.WriteLine("Socket de protocol inconnu" + 
            socketsPrets.ProtocolType, 
            "Serveur", Niveaux.Grave); 
      break; 
     } 
    } 

有沒有辦法打電話給選擇阻塞?

+0

對不起法文變數名稱:P – 2011-02-10 16:13:16

+1

Pas deproblèmemon ami。 – 2011-02-10 16:18:32

回答

1

似乎是.NET 3.5中的錯誤。通過旁路Int32.MaxInt

0

設置爲-1(或Timeout.Infinite)是您如何將其設置爲阻止。

我隱約記得(所以這可能是錯誤的信息)Select()返回,如果有一個套接字錯誤,即使你只對讀取準備好感興趣,所以你可能想檢查這是爲什麼和從下次您撥打Select()時通過的列表中刪除失敗的連接。

+0

正如我所說的,-1使它自動返回,在錯誤列表或讀取列表中都沒有套接字。我確實遇到了你已經解釋過的行爲,但它不影響當前的問題。 – 2011-02-10 16:43:20