套接字 – perl6 IO ::套接字::异步服务器死亡,例外:peer通过peer重置连接

前端之家收集整理的这篇文章主要介绍了套接字 – perl6 IO ::套接字::异步服务器死亡,例外:peer通过peer重置连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是echo服务器代码
#!/usr/bin/env perl6
my $port = 3333 ;
say "listen port $port" ;

react {
    my $ids = 0 ;
    whenever IO::Socket::Async.listen('0.0.0.0',$port ) -> $conn {
        my $id = $ids++ ;
        $conn.print( "$id: hello\n") ;
        whenever $conn.Supply.lines -> $line {
            say "$id: $line" ;
            $conn.print( "$id : $line\n") ;
        }
    }
}

这是客户端代码

#!/usr/bin/env perl6
my $port = 3333 ;
my $conn = await IO::Socket::Async.connect('localhost',$port );
$conn.print: "{time}\n";

#$conn.Supply.tap(-> $v { print $v });

sleep 1 ;
$conn.close;

当客户端连接然后不从服务器检索任何数据,然后关闭服务器因此错误而死的连接:

listen port 3333
0: 1524671069
An operation first awaited:
  in block <unit> at ./server2.p6 line 5

Died with the exception:
    connection reset by peer
      in block <unit> at ./server2.p6 line 5

X::AdHoc+{X::Await::Died}: connection reset by peer

如何优雅地捕获网络错误,以便服务器更强大?

解决方法

如果你想在每次退出时(或者当Promise被破坏时)底层的Supply(或任何等待的,如Promise)处理这种情况,你可以在随时随地安装一个QUIT处理程序.它的工作原理很像异常处理程序,因此它会要求您以某种方式匹配异常,或者只是默认情况下,如果您想将所有退出原因视为“罚款”.
whenever $conn.Supply.lines -> $line {
    say "$id: $line" ;
    $conn.print( "$id : $line\n") ;
    QUIT {
        default {
            say "oh no,$_";
        }
    }
}

这将输出“哦不,由同行重置连接”并继续运行.

原文链接:https://www.f2er.com/Perl/171886.html

猜你在找的Perl相关文章