#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11107627 use warnings; use IO::Socket; use Forking::Amazing; my $maxforks = 20; # tune these ... my $clientsperchild = 300; my $port = 6666; my $listen = IO::Socket::INET->new(LocalPort => $port, Listen => 20, Reuse => 1) or die "$@ on listen create"; Forking::Amazing::run $maxforks, sub { print "child $$\n"; process( scalar $listen->accept or return [] ) for 1 .. $clientsperchild; return []; }, sub { push @Forking::Amazing::ids, 1 }, (1) x $maxforks; sub process # custom code goes in here { my $socket = shift; my $query = <$socket> // return []; # read query print $socket "prefork $$ is answering: $query"; # reply }