RosettaCodeData/Task/Echo-server/Perl/echo-server-1.pl

30 lines
938 B
Perl

use IO::Socket;
my $use_fork = 1;
my $sock = new IO::Socket::INET (
LocalHost => '127.0.0.1',
LocalPort => '12321',
Proto => 'tcp',
Listen => 1, # maximum queued connections
Reuse => 1,
)
or die "socket: $!"; # no newline, so perl appends stuff
$SIG{CHLD} = 'IGNORE' if $use_fork; # let perl deal with zombies
print "listening...\n";
while (1) {
# declare $con 'my' so it's closed by parent every loop
my $con = $sock->accept()
or die "accept: $!";
fork and next if $use_fork; # following are for child only
print "incoming..\n";
print $con $_ while(<$con>); # read each line and write back
print "done\n";
last if $use_fork; # if not forking, loop
}
# child will reach here and close its copy of $sock before exit