Re: Re: CGP for OS/2

От: Vladimir A. Butenko <CGatePro_at_mx_ru>
Дата: Sat 08 Nov 2003 - 00:17:31 MSK


On Fri, 7 Nov 2003 15:06:20 +0200
  <CGatePro@mx.ru> (Sergey Shenderuk) wrote:

> VAB> Давайте Вы лучше попросите IBM выпустить отладочную версию OS/2.
> VAB> mailto:support@ibm.com
>
> Я полагал, что Вы можете быть заинтересованы в исправлении ошибок в CGP
> и предлагал свою посильную помощь. Извините, если я ошибся.

Я пока не вижу ошибок в CGP из Вашего репорта. Я вижу некоторое, скажем так, "нестандартное" поведение OS/2 TCP/IP stack-а, которое можно назвать ошибкой, а можно и не назвать. Поэтому я и предлолжил Вам обратиться в IBM. Возможно, они заинтересованы в исправлении ошибок OS/2.   

> VAB> Кому должно? Там наверняка при обрыве связи os2_select выдает
> какую-то
> VAB> ошибку (а send() - не выдает).
>
> dialup сервер и CGP физически на разных машинах.

Что не мешает ICMP пакету придти с диалупа к Вам. А как уж OS/2 его обрабатвает - это не ведому уже, боюсь, никому.   

> VAB> Если найдете, какую ошибку выдает - тогда можно будет вставить
> VAB> проверку на нее.
>
> Ошибку я могу найти только в логе, если CGP ее туда запишет.
А почему не в документации на OS/2?

> VAB> А так - все правильно, канал УПАЛ, связь оборвалась.
>
> Пример с падением модемного соединения я привел только для того,
> чтобы проиллюстрировать тот факт, что v4.0.6 в тех же условиях
> работает нормально, в отличии от v4.1.*

4.06 выдает send(). Если это не вернуло ошибки, но вернуло flow control (то есть сообщило, что выдало только часть - так делает порой и FreeBSD), то старные версии втупую вставали на повтор send(). OS/2, видимо, прерывает send() по обрыву связи, но вернуть ошибку не может, так как что-то уже передала. И где-то втихую у себя флажок об ошибки на сокете хранит. Если выдать send() еще раз, то этот флажок проигнорируется, и она будет сидеть и ждать (а тут вы и канал поднимете, вот оно и поедет).

4.1 в таких ситуациях выдает после send() Select() (точнее - os2_select()). Поэтому оно сидит не до опупения в ожидании (как старые версии), а может слететь по тайм-ауту. А в OS/2 ВИДИМО этот флажок на os2_select таки действует. И заставлят ее вернуть какую-то ошибку - НЕДОКУМЕНТИРОВАННУЮ. По документам os2_select() может закончиться с <=0 только если тайм-аут истек (или параметры вызова были кривые). Так как в параметры вызова мы верим, как в родную партию, то любой неположительный выход из select() - это time-out. Что Вы и наблюдаете.   

> Еще раз: CGP OS/2 v4.1.*, канал _не падает_, просто он медленный и высокая
> неравномерность поступления данных. При таких условиях POP3(IMAP) клиент
> не может вытащить с сервера длинные письма.

Я в отладчике канал задерживал надолго. И select() выпадал ровно через 2 минуты, как ему и положено.

> Best regards,
> Sergey mailto: shs @ isr . lviv . ua

Sincerely,
Vladimir Получено Fri Nov 07 21:19:41 2003

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