如何在Perl中停止侦听HTTP::Daemon端口
我有一个基本的PerlHTTP服务器,使用。当我停止并启动脚本时,似乎仍在监听端口,我收到一条错误消息,说我的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
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块,仍然得到相同的错误。