Welcome! Log In Create A New Profile

Advanced

Re: Сокет не закрывается после отправки тела

Maxim Dounin
June 15, 2018 06:06AM
Hello!

On Thu, Jun 14, 2018 at 10:48:34AM -0400, eustas wrote:

> 1) common sense - иначе вышестоящий фильтр не узнает закончилась ли
> отправка

Фильтры - пропускают через себя данные, которые им передают.
Отправка заканчивается тогда, когда a) источник данных всё
передал, и б) не осталось буферизированных где-либо данных.

Ни о каком NGX_DONE тут с точки зрения common sense речи не идёт
как минимум по двум причинам:

- нет семантических отличий от стандартной пары NGX_OK / NGX_AGAIN;

- информации недостаточно для выражения состояния "не осталось
буферизированных где-либо данных".

Но вообще, common sense - плохой источник знаний об API.

> 2) common practice -
> https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_gzip_filter_module.c#L621
> и ещё 10 модулей возвращают NGX_DONE

По сслыке - использование кода NGX_DONE во внутренней функции
ngx_http_gzip_filter_buffer(), не более того.

Про "ещё 10 модулей" - верю (считать лень), но, боюсь, ни одного
фильтра среди них вы не найдёте.

> 3) документация - "NGX_DONE — Operation complete or continued elsewhere.
> Also used as an alternative success code" и более никаких объяснений, в
> каких случаях фильтр может его возвращать.

Потому a) речь идёт об описании семантики кода, а не о его
использовании в конкретных местах, и б) фильтр никогда не может
возвращать NGX_DONE.

> В
> http://nginx.org/en/docs/dev/development_guide.html#http_building_filter_modules
> описано только 2 случая - возврат NGX_ERROR и возврат значения полученного
> от следующего фильтра. Если следовать этому, то из каких соображений можно
> было бы вернуть NGX_OK?

Development guide - это всё-таки guide, а не reference. Он
показывает, как делать стандартные вещи, но не заменяет чтение
кода там, где вы пытаетесь выйти за пределы явно описанного.

В общем, выпиливайте NGX_DONE. Фильтры его возвращать не должны,
и если вдруг возвращают - последствия непредсказуемы. Странно,
что у вас раньше от этого ничего не ломалось - должны были быть
серьёзные проблемы из-за некорректной финализации, если она
случалась с NGX_DONE.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Сокет не закрывается после отправки тела

eustas June 14, 2018 09:32AM

Re: Сокет не закрывается после отправки тела

Maxim Dounin June 14, 2018 10:22AM

Re: Сокет не закрывается после отправки тела

eustas June 14, 2018 10:48AM

Re: Сокет не закрывается после отправки тела

Maxim Dounin June 15, 2018 06:06AM

Re: Сокет не закрывается после отправки тела

eustas June 15, 2018 07:14AM

Re: Сокет не закрывается после отправки тела

Maxim Dounin June 15, 2018 09:22AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 64
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready