RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Программирование сокетов


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Igor Vaskov, http://www.granit.msk.ru
To : ErOs2
Subj : Программирование сокетов

> > Ок. А если поток данных длинный, соединение медленное? Не будет ли ситуаций, когда в потоке появляются "окна" и read вертается без ошибки, но соединение еще живо? Или в этом случае read ждет данных даже в неблокирующем режиме?
>
> с сокетом работаешь через select.
> ты ведь работаешь с сокетом через select, да?

Вообще-то нет. Для начала я в стандартной тредовой модели с блокирующими сокетами сменил режим на неблокирующий, чтобы можно было в этом же треде отслеживать таймауты. Но если нужен обязательно select - сделаем.

> если select сказал что на сокете есть данные - делаешь recv.
> recv принимает столько данных, сколько есть. даже в блокирующем режиме не ждёт.

Точно в блокирующем не ждет конца пакета?

> если recv читает 0 - значит соединение закрыто.

Т.е. резюме такое - если select сказал, что данные есть, а recv вернул ноль - кирдык соединению?


Mon 28 Nov 2005 22:49 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.7.5) Gecko/20050




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.