|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Sapozhnikov 2:5020/400 11 Jun 2003 14:36:55 To : Artem Chuprina Subject : Re: CGI.pm --------------------------------------------------------------------------------
Artem Chuprina wrote:
> Хмутро.
>
> ST>> Вылечилось полным сносом и последующей установкой с нуля. В общем,
> ST>> подземный стук какой-то.
>
> ST> А виноватым в pезультате оказался... mod_gzip. (Мат!)
> ST> Пpидется, видимо, ползти в стоpону втоpого апача, там mod_deflate есть.
>
> Он и для первого есть.
А переписать:
read(STDIN, $buffer, $len);
как:
use Errno qw(EINTR EAGAIN);
for (my $offset = 0; $offset < $len;) {
my $n = read(STDIN, $buffer, $len - $offset, $offset);
last unless defined($n) ? $n : ($!{EINTR} || $!{EAGAIN});
$offset += $n;
}
не судьба? Очевидно тут имеет место стечение двух факторов:
1a. STDIN теперь не TCP сокет, а некая другая структура (pipe?
unix domain socket in datagram mode? pseudo-tty pair?) для
которой типовой реакцией при чтении данных большего объема
чем содержатся в буфере является short read.
либо
1b. Какой-то сигнал (например SIGCHLD от какого-то вспомогательного
дочернего процесса) прерывает системный вызов read.
2. Используемый IO Layer почему-то не исправляет эту ситуацию.
--
Андрей
P.S. Хотя еще есть вариант, что apache с mod_gzip попросту отдал
STDIN в неблокирующем режиме. Тогда спасет:
use Fcntl;
fcntl(STDIN, F_SETFL, 0);
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)
Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/6577f025f799.html, оценка из 5, голосов 10
|