sockets - perl6 IO::Socket::INET 无法从套接字接收数据:对等方重置连接
问题描述
示例服务器:
#!/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
. 我应该如何捕捉这个错误?
解决方案
服务器需要在循环块中捕获错误:
#!/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
推荐阅读
- java - 这是一个没有得到妥善解决的过度约束的排班问题吗?
- laravel - 如何在 SQL 查询中使用 if
- php - 循环和回显特定行显示为空白?
- angular - 将变量传递给 Angular routerLink
- c++ - 在 GTEST (Googletest) 中使用模板
- android - 如何将 zip 文件从我的 Android 应用程序上传到 Amazon AWS?
- python - 使用 Beautiful Soup 从网站上抓取 SVG 标签
- c++ - 没有外部库的链接错误“LNK2019:未解析的外部符号”
- python - 熊猫在条件下增加计数器
- css - 如何防止导航栏进入移动设备上的元素?