У меня есть программа на C # с большим количеством (скажем, около тысячи) открытых объектов TcpClient. Я хочу войти в состояние, которое будет ждать, пока что-то не произойдет для любого из этих подключений.
Я бы предпочел не запускать ветку для каждого подключения.
Что-то типа...
while (keepRunning)
{
// Wait for any one connection to receive something.
TcpClient active = WaitAnyTcpClient(collectionOfOpenTcpClients);
// One selected connection has incomming traffic. Deal with it.
// (If other connections have traffic during this function, the OS
// will have to buffer the data until the loop goes round again.)
DealWithConnection(active);
}
Дополнительная информация:
Объекты TcpClient поступают из TcpListener.
Целевая среда будет MS .NET или Mono-on-Linux.
Протокол требует длительных периодов простоя, пока соединение открыто.
select
системный вызов. Я уверен, что в винде есть аналог. - person Victor Sorokin   schedule 04.04.2011