Какая операционная система?
Для машин Windows, если вы пишете сервер для правильного масштабирования и, следовательно, используете порты завершения ввода / вывода и асинхронный ввод / вывод, тогда основным ограничением является количество невыгружаемого пула, который вы используете для каждое активное соединение. Это напрямую переводит в ограничение, основанное на объеме памяти, установленной на вашей машине (пул невыгружаемого пространства - это ограниченный объем фиксированного размера, основанный на общем объеме установленной памяти).
Для соединений, которые не видят большого трафика, вы можете уменьшить их, сделав их более эффективными, публикуя «нулевые байтовые чтения», которые не используют пул невыгружаемого списка и не влияют на ограничение заблокированных страниц (еще один потенциально ограниченный ресурс, который может помешать вам иметь много открытых соединений сокетов).
Кроме того, вам нужно будет профилировать, но мне удалось получить более 70 000 одновременных подключений на скромно указанном (760 МБ памяти) сервере; см. здесь http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html для более подробной информации.
Очевидно, что если вы используете менее эффективную архитектуру, такую как «поток на соединение» или «выбор», то следует ожидать менее впечатляющих показателей; но, имхо, просто нет причин выбирать такие архитектуры для серверов сокетов Windows.
Редактировать: см. Здесь http://blogs.technet.com/markrussinovich/archive/2009/03/26/3211216.aspx; способ вычисления объема невыгружаемого пула изменился в Vista и Server 2008, и теперь доступно гораздо больше.