in reply to To Fork for Not to Fork

Your problem, at least on the serverside, is your extra loop in the 'else' statement. It shouldn't be there.
else { while ($line = <>) { print $client $line; } }
That part. Replace the while(){} with next. Then put an exit after the else's closing bracket. What happens is the code accepts a connection, then it forks and the child process goes into an infinite loop reading from the client, while the parent process goes into an infinite loop reading from stdin <>. Thus the child never exits and the server never accepts another client.

Cannonical example from perl cook book:
#assuming $server initialized while($child = $server->accept() ) { next if $pid = fork(); #CHILD STUFF exit; #kill the child process }
Forking servers are vastly simpler then single process servers using select.