【发布时间】:2010-06-14 16:48:40
【问题描述】:
我有一个使用 HTTP::Daemon 的基本 perl HTTP 服务器。当我停止并启动脚本时,似乎仍在侦听端口,并且收到一条错误消息,指出我的 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);
}
【问题讨论】: