Perl 快速 CGI:你曾经退出循环吗?

Perl fast CGI : do you ever exit the loop?

考虑标准的 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 脚本时会发生什么?

通常不会,但有可能。

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 对象)return 是一个负数,它可以 return 为假。

深入了解两个 C 函数之一,称为 OS_Accept,一个用于 unix,一个用于 Windows。它们主要是 accept 系统调用的包装器。

accept 主要是在被信号中断或进程耗尽资源(套接字或内存)时失败。大多数其他原因是代码中的错误。