Я потратил много времени на это.
Каждая программа Windows perl имеет ограничение в 64 потока, и POSIX не поддерживается.
После того, как вы разветвляете дочерний элемент, родитель долженвызовите waitpid ($ childPID, 0), чтобы освободить поток, однако это приводит к блокировке родителя, что приводит к вопросу: какой смысл разветвляться, если родитель должен ждать, пока ребенок завершит работу?
ЧТО НЕ БЫЛО ОЧИЩЕННО, так это то, что родитель может выдать waitpid ($ childPID, 0) в любое время позже!
Когда мой дочерний поток завершает последнее, что он делает, это создает файл ...
open OUT, ">$$.pid";
print OUT $$;
close OUT;
exit(0);
Каждый раз, когда родитель собирается форкнуть, он проверяет файлы .pid, выдает waitpid для каждого и затем удаляет файл .pid.
Это не позволит использовать более 64 подключенийв то же время, но это позволит родителю продолжить работу, пока дочерние потоки выполняют свою работу, а затем освободить потоки после завершения дочернего процесса.
Еще одно упоминание стоит отметить, что первым делом дочерний процесснужно закрыть сокет прослушивания ($ server в вопросе), чтобы только родитель отвечал новым клиентам.