Re: Re: Timeouts

От: Vladimir A. Butenko <CGatePro_at_mx_ru>
Дата: Fri 20 Jun 2003 - 20:39:42 MSD


On Fri, 20 Jun 2003 20:19:50 +0400
  <CGatePro@mx.ru> (Sergey Akhapkin) wrote:
> Hello Vladimir,
>
> Friday, June 20, 2003, 7:47:36 PM, you wrote:
>
> >> Кроме того в этом же логе:
> >> 16:58:05.83 0 TEMPFILE(15861786) writing failed. Error Code=bad file
> >> descriptor
> >> Это тоже наша ?
> VAB> Фиг его знает. Надо бы посмотреть, что вокруг в логе было - хотя бы
> строк
> VAB> 30-40 перед этой.
>
> Эт можно, но уже не в листе. Т.к. разбираюсь как раз с один (вообще
> одним! за все время) случаем когда вот так вот полезло не туда, и не
> то.
>
> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> Есть еще один ньанс, фильтр с настройками этого пользователя, вообще
> никогда никуда (ни в какие дескрипторы, а демону передается только
> путь до письма) не пишет писем, кроме уведомлений (но в них нету ни
> UUE, ни BASE64 кои видны в этом логе).
Как это? Если фильтр разнес свою память, то он будет писать куда угодно и что угодно.

> Поэтому все же есть маленькая
> (очень маленькая) надежда, что это сервер запутался в дескрипторах и
> не туда начал писать письмо.

"Этт вряд ли". Если бы такое случилось, там бы все упало бы совсем - унутре сервера.

> Кстати "запутаться" он мог, пока бил наш
> фильтр по голове дубиной - а фильтр этого не любит, т.к. он форкается,
> в рез-тате убиваете только "диспечера", а вот "сканеры" от предыдущего
> "диспечера" еще остаются.

А какая разница, что там с FD внутри процесса фильтра? Он для того и сделан отдельным процессом, чтобы был ограничен своим хозяйством.

> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>
> VAB> не понятно, ибо в каждой OS была обнаружена своя дыра в этом месте,
> поэтому
> VAB> втихую все это сейчас оставлено так, в расчете на "хорошее поведение"
> VAB> внешних программ.
>
> Можно приватно про это ? Я конечно уверен, что файлами фильтр ничего
> не делает (открывает только по readonly), но "предупрежден -
> вооружен".

На самом деле, там все не совсем так (я тексты посмотрел). Все ненужные дескрипторы при старте внешней программы все-таки закрываются. Хотя можете вставить в свой фильтр просто эксперимента ради проверку на то, какие дескрипторы, кроме 0-1-2 оказались открыты при старте (в цикле пройтись от 2 до 2000). Вроде как не должно быть ничего.   

> >> 1) По Линуха жестко используется fork().
> VAB> А... А ответы он как в канал пишет? Из форкнутой копии?
>
> Угу. А что могут быть с этим проблемы ?

А это вопросы к "производителям операционной системы Линукс".   

> >> 2) printf там не пользуется вообще.
> VAB> Это хорошо. То есть пишете при помощи write(2)?
>
> Да, только write(1, ...) с чего это ему на 2 писать-то.

Ну, например. В пайпе осталось 20 байт. Передаем 100. 20 записали, встали на ожидание. Подлетел другой, у которого тоже есть 100 на запись. Встал сразу, бо писать некуда. Теперь мы этот пайп почитали с другой стороны, освободив буфер. Если первым пробудился первый, и дописал свои 80 байт - то ляпота. А если второй - то получится, э, "спорадическая ошибка". Как на самом деле работает pipe в Линухе (то есть блокируется ли он целиком, или может блокироваться по частям, приводя к указанным проблемам) - не знаю.

> + Все же фразу в online-документации (в старых версиях таймауты есть,
> а команды нет, а поддерживать как-то надо). :)

Зачем?   

> Best regards,
> Sergey Akhapkin <asv@drweb.ru>
> Software Developer
> ID Antivirus Lab <http://www.drweb.ru>

Sincerely,
Vladimir Получено Fri Jun 20 16:47:43 2003

Этот архив был сгенерирован hypermail 2.1.8 : Tue 21 Feb 2006 - 03:14:24 MSK