Для входящего соединения создается новый сокет, поэтому лимит определяется в основном тем, сколько активных сокетов может быть в системе. Для каждого сокета требуется файловый дискриптор и некоторое количество системных буферов. Плюс, для обработки сетевых событий требуются процессорные мощности. При этом упереться можно в разные лимиты - самое первое, это ulimit'ы (по умолчанию в Linux пользовать может создать 1024 файловых дискриптора), они легко повышаются. В какой-то момент вы упретесь в лимиты ядра, и вам придется пересобирать ядро с кастомными параметрами. В конце концов, вы упретесь в физические лимиты машины (например в лимит на физическую память, которая требуется для системных буферов), если не упретесь раньше в лимиты по производительности. Поэтому "сколько" вопрос более риторический, смотря что вы хотите сделать. Если поставить рекорд - то можно собрать систему которая будет держать миллионы соединений. Реальная система на реальных запросах скорей всего раньше упрется в нехватку других ресурсов.