Как обнаружить клиентское соединение с использованием FCGI? - PullRequest
0 голосов
/ 11 июля 2011

У меня есть приложение FCGI, написанное на C. У нас есть случаи, когда клиент закрывает активное соединение - т.е. покидает страницу во время загрузки страницы - которую мы хотели бы обнаружить в приложении, если это возможно. У нас есть наш веб-сервер (nginx), настроенный на закрытие соединения FCGI, когда клиентское соединение неожиданно закрывается, поэтому я надеюсь, что, глядя на состояние потока FCGI в конце транзакции, мы могли бы быть в состоянии обнаружить инициированное клиентом закрытое соединение.

Мой вопрос: возможно ли обнаружить это с помощью FCGX_GetError () в выходном потоке непосредственно перед вызовом FCGX_Finish_r ()? Если нет, как я могу поймать в ловушку такое состояние?

Я пытался спросить в списке рассылки FastCGI, но, похоже, список не работает.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2013

Вы должны получить SIGPIPE, когда клиент закрывает соединение. Как правило, игнорировать этот сигнал безопасно. Но если вам нужно это обнаружить, просто установите обработчик для SIGPIPE.

0 голосов
/ 11 апреля 2012

Если данные были переданы через сокет и произошла ошибка, FCGX_GetError() вернет errno, вы также можете обнаружить это с помощью FCGX_PutStr() < 0.libfcgi внутренне буферизует выходной поток, используя размер 8192 байта, любой оставшийся буфер передается при вызове FCGX_Finish_r().

...