我在多个套接字上调用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 :(得分:1)
似乎是.NET 3.5中的错误。通过传递Int32.MaxInt
来绕过答案 1 :(得分:0)
设置-1
(或Timeout.Infinite
)是您将其设置为阻止的方式。
我依稀记得(这可能是错误的信息)如果其中一个套接字出现错误,Select()
会返回,即使您只对阅读准备感兴趣,所以您可能想检查一下这就是为什么并在下次调用Select()
时从您的列表中删除失败的连接。