Re: $r->request_body выдает ошибку если тело запроса пустое

Andrey Antonov antonov.andrey at gmail.com
Fri Dec 22 17:18:41 MSK 2006


 Ошибку генерирует например такой код:

sub handler{
    my $r = shift;
    if( $r->has_request_body(\&handle_request) ){
        return OK;
    } else {
        return handle_request($r);
    }
}

sub handle_request{
    my $r = shift;
    $r->request_body(); # если запрос сделан методом гет то здесь ошибка,
выполнение хендлера прерывается
    return OK;
}

Ну понятно, что можно в handler установить переменную, $r->request_body() в
if запихать и все будет работать. Информация perl -V прилагается.

22.12.06, Igor Sysoev <is at rambler-co.ru> написал(а):
>
> On Fri, 22 Dec 2006, Andrey Antonov wrote:
>
> > Наконец-то перешел с 0.3.61 на 0.5.4, все что до этого не работало в
> > 0.4.хтеперь работает, это здорово, весь новый функционал очень полезен
> > для
> > написания достаточно сложных хендлеров на перле.
> > Заметил, что $r->request_body стало возвращать ошибку "close() channel
> > failed (9: Bad file descriptor)" если тело запроса пустое (например в
> > обычном гет запросе). Хорошо бы это пофиксить, тк сейчас надо либо
> проверять
> > тип запроса, либо переменную специальную устанавливать, что не удобно.
>
> Как выглядит перловый код ?
>
>
> Игорь Сысоев
> http://sysoev.ru
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20061222/b98176b2/attachment.html>
-------------- next part --------------
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
  Platform:
    osname=freebsd, osvers=6.1-release, archname=i386-freebsd-thread-multi
    uname='freebsd agava.ams-systems.ru 6.1-release freebsd 6.1-release #1: thu dec 21 15:31:23 msk 2006 root at agava.ams-systems.ru:usrsrcsysi386compilemykernel i386 '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include',
    optimize='-O',
    cppflags='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include'
    ccversion='', gccversion='3.4.4 [FreeBSD] 20050518', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags ='-pthread -Wl,-E  -L/usr/local/lib'
    libpth=/usr/lib /usr/local/lib
    libs=-lm -lcrypt -lutil -lc_r
    perllibs=-lm -lcrypt -lutil -lc_r
    libc=, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
    cccdlflags='-DPIC -fPIC', lddlflags='-shared  -L/usr/local/lib'


Characteristics of this binary (from libperl):
  Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
                        PERL_MALLOC_WRAP USE_ITHREADS USE_LARGE_FILES
                        USE_PERLIO USE_REENTRANT_API
  Built under freebsd
  Compiled at Dec 21 2006 16:13:50
  @INC:
    /usr/local/lib/perl5/5.8.8/i386-freebsd-thread-multi
    /usr/local/lib/perl5/5.8.8
    /usr/local/lib/perl5/site_perl/5.8.8/i386-freebsd-thread-multi
    /usr/local/lib/perl5/site_perl/5.8.8
    /usr/local/lib/perl5/site_perl
    .


More information about the nginx-ru mailing list