Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中停止侦听HTTP::Daemon端口_Perl_Http - Fatal编程技术网

如何在Perl中停止侦听HTTP::Daemon端口

如何在Perl中停止侦听HTTP::Daemon端口,perl,http,Perl,Http,我有一个基本的PerlHTTP服务器,使用。当我停止并启动脚本时,似乎仍在监听端口,我收到一条错误消息,说我的HTTP::Daemon实例未定义。如果我尝试在脚本停止后大约一分钟启动它,它工作正常,可以再次绑定到端口 当程序终止时,有没有办法停止监听端口,而不必等待它超时 use HTTP::Daemon; use HTTP::Status; my $d = new HTTP::Daemon(LocalAddr => 'localhost', LocalPort => 800

我有一个基本的PerlHTTP服务器,使用。当我停止并启动脚本时,似乎仍在监听端口,我收到一条错误消息,说我的HTTP::Daemon实例未定义。如果我尝试在脚本停止后大约一分钟启动它,它工作正常,可以再次绑定到端口

当程序终止时,有没有办法停止监听端口,而不必等待它超时

 use HTTP::Daemon;
 use HTTP::Status;

 my $d = new HTTP::Daemon(LocalAddr => 'localhost', LocalPort => 8000);

 while (my $c = $d->accept) {
    while (my $r = $c->get_request) {
       $c->send_error(RC_FORBIDDEN)
    }
    $c->close;
    undef($c);
 }
编辑:

根据DVK的响应,我尝试调用
$d->close()
,但在尝试重新启动脚本时仍然收到相同的错误

END { $d->close(); }
$SIG{'INT'} = 'CLEANUP';
$SIG{__WARN__} = 'CLEANUP';
$SIG{__DIE__} = 'CLEANUP';

sub CLEANUP {
    $d->close();
    undef($d);
    print "\n\nCaught Interrupt (^C), Aborting\n";
    exit(1);
}

您是否在程序结束时尝试了
$d->close()

如果没有,试试看。HTTP::Daemon POD示例中没有记录该方法,但该方法应该是可用的(继承自)


请记住,您可能需要在调用它的位置上具有创造性,例如,它可能需要进入
\uu DIE\uu
处理程序或
END{}
block

我在创建HTTP::Daemon时通过设置
ReuseAddr=>1
找到了解决问题的方法

my $d = new HTTP::Daemon(
    ReuseAddr => 1, 
    LocalAddr => 'localhost', 
    LocalPort => 8000);
是的,我最后调用了$d->close()、INT、\u DIE\uu和\u WARN\uu块,仍然得到相同的错误。