@pool = (1..N); listen on port N loop { select(waiting for connect); accept pick port from pool fork child does connect, reads socket, writes to forwarder socket, reads results and writes back to client. closes sockets and exits. parent looks for dead children to add port back to pool }