perl6 IO :: Socket :: INET Не удалось получить данные из сокета: сброс соединения по пиру - PullRequest
0 голосов
/ 26 апреля 2018

Пример сервера:

#!/usr/bin/env perl6
my $listen = IO::Socket::INET.new(:listen, :localhost<localhost>, :localport(3333));
loop {
    my $conn = $listen.accept;
    while my $buf = $conn.recv(:bin) {
        $conn.write: $buf;
    }
    $conn.close;
}

Клиент:

#!/use/bin/env perl6
my $c = IO::Socket::INET.new(:host<localhost>, :port(3333));
$c.print: "{time}\n";
#say $c.recv; #commented out on purpose
sleep 1 ;
$c.close ;

Ошибка сервера:

Could not receive data from socket: Connection reset by peer in block <unit> at server4.p6 line 5

В сервере на каждом изблоки, которые я пробовал CATCH и QUIT.Как я должен поймать эту ошибку?

1 Ответ

0 голосов
/ 26 апреля 2018

Сервер должен перехватить ошибку в блоке цикла:

#!/usr/bin/env perl6
my $listen = IO::Socket::INET.new(:listen, :localhost<localhost>, :localport(3333));
loop {
    my $conn = $listen.accept;
    while my $buf = $conn.get {
        $conn.print: $buf;
    }
    $conn.close;
    CATCH { default { say .^name, ': ', .Str ,  " handled in $?LINE";}}
}

Выходные данные сервера сообщают об ошибке и продолжают работать для приема новых подключений:

perl6 --ll-exception server.p6
X::AdHoc: Could not receive data from socket: Connection reset by peer handled in 9
...