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


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

> > Ситуация такая. Клиент закрывает соединение. Как на сервере достоверно узнать об этом?
> > rc:=getsockopt(xSock,SOL_SOCKET,SO_ERROR,@B, hLen);
> >
> > Проверяется на localhost петле.
> > Выдает всегда в переменную "В" ноль. Результат работы не зависит от состояния соединения.
> Ну а что ты ожидал? Нормальное полузакрытое TCP соединение. Откуда ошибка? Более того, оперативно узнать, что к нам пришел FIN, вообще невозможно. А так просто читаешь поток до тех пор, пока он не закончится (read вернулся без ошибки, но с данными нулевой длины).
>
Ок. А если поток данных длинный, соединение медленное? Не будет ли ситуаций, когда в потоке появляются "окна" и read вертается без ошибки, но соединение еще живо? Или в этом случае read ждет данных даже в неблокирующем режиме?

Mon 28 Nov 2005 21:59 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.