Код очистки FastCGI не работает под Windows - PullRequest
1 голос
/ 19 марта 2009

Используя apache на сервере Windows с mod_fastcgi, код C выглядит так:

void main() {
    init();
    while (FCGI_Accept() >= 0)
        work();
    cleanup();
}

Когда служба отключается (т. Е. Net stop apache2), процесс завершается без получения кода очистки.

Что мне здесь не хватает?

Ответы [ 2 ]

4 голосов
/ 25 апреля 2009

Кажется, из чтения man-страницы FCGI_Accept и этой записи FAQ , что FCGI_Accept, фактически, не возвращает -1 в случае отключения Apache. Попробуйте установить обработчик сигнала для SIGUSR1 и SIGTERM. Вот пример (не специфичный для Windows, но стоит попробовать), опубликованный некоторое время назад в списке рассылки, здесь.

0 голосов
/ 23 марта 2009

Единственный способ преждевременного выхода - это вызвать "exit ()" где-нибудь внутри work () (или FCGI_Accept () ...)

Edit:

Если вы считаете, что это может быть FCGI_Accept (), попробуйте с помощью onexit () настроить обратный вызов, который будет вызываться из метода exit (). По крайней мере это подтвердит преждевременный вызов exit ().

...