考虑标准的Perl快速CGI脚本:
#!/usr/bin/perl
use CGI::Fast;
# Init handler
while (my $cgi = CGI::Fast->new)
{
# Handle request
}
# Do you ever get here?
我是否曾退出循环并有机会进行清理?
当服务器因为超出时间限制而抛出test.fpl脚本时会发生什么?
答案 0 :(得分:3)
不正常,但有可能。
CGI::Fast::new
是:
sub new {
my ($self, $initializer, @param) = @_;
if ( ! defined $initializer ) {
$Ext_Request ||= _create_fcgi_request( $in_fh,$out_fh,$err_fh );
return undef unless $Ext_Request->Accept >= 0;
}
CGI->_reset_globals;
$self->_setup_symbols(@CGI::SAVED_SYMBOLS) if @CGI::SAVED_SYMBOLS;
return $CGI::Q = $self->SUPER::new($initializer, @param);
}
如您所见,如果$Ext_Request->Accept
(其中$Ext_Request
是FGCI :: Request对象)返回负数,则返回false。
向下钻取我们到两个名为OS_Accept
的C函数之一,一个用于unix,一个用于Windows。它们主要是accept
系统调用的包装器。
accept
如果被信号中断或者进程耗尽资源(套接字或内存),则主要会失败。大多数其他原因都是代码中的错误造成的。