Текст задания:
Запустите на 8080 порту tcp сервер, который будет принимать данные от клиента и выводить их на STDOUT, а когда получит сообщение «exit» перестанет работать.
Мое решение, работает под линухом на локальной виртуалке:
use strict;
use IO::Socket;
setpgrp(0,0);
my $general_ppid = $$; # print $general_ppid."\n";
my $server = IO::Socket::INET->new(
LocalPort => 8080,
Type => SOCK_STREAM,
ReuseAddr => 1,
Listen => 10)
or die "Can't create server on port 8080 : $@ $/";
while (my $client = $server->accept()) {
my $child = fork();
if ($child) { close($client); next }
if (defined $child) {
close( $server );
$client->autoflush(1);
my $message;
do {
if (defined (my $message1 = <$client>))
{ chomp $message1; $message = $message1; }
else { last ; }
if ($message eq "exit") { kill -2, 0 }
else { print $message."\n"; }
} while (1);
close( $client );
exit;
} else { die "Can't fork^ $!"; }
}
В окне вывода Stepik появляется ошибка:
Failed. Runtime error Error:
Вопрос: где что не так?