Socket.Select(),-1超时根本没有阻塞

时间:2011-02-10 16:07:50

标签: c# sockets

我在多个套接字上调用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;
        }
    }

有没有办法调用选择阻止?

2 个答案:

答案 0 :(得分:1)

似乎是.NET 3.5中的错误。通过传递Int32.MaxInt

来绕过

答案 1 :(得分:0)

设置-1(或Timeout.Infinite)是您将其设置为阻止的方式。

我依稀记得(这可能是错误的信息)如果其中一个套接字出现错误,Select()会返回,即使您只对阅读准备感兴趣,所以您可能想检查一下这就是为什么并在下次调用Select()时从您的列表中删除失败的连接。