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; } }
有没有办法调用选择阻止?
似乎是.NET 3.5中的错误。 通过传递Int32.MaxInt来绕过
设置-1
(或Timeout.Infinite
)是如何将其设置为阻止。
我隐约记得(所以这可能是错误的信息),如果其中一个套接字出现错误, Select()
返回,即使您只对读取准备感兴趣,所以您可能想要检查这是否是原因并删除下次调用Select()
时传递的列表连接失败。