Тема: WinSock API
Показать сообщение отдельно
  #12  
Старый 28.12.2010, 00:12
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Все никак не разберусь. Вот подробный отчёт:
Код:
k := select(0, @FDSet, nil, nil, @TimeVal);
if k = 0 then
      result := true;
сокет в фунцкию передаю тот же, на который отправляю все данные и с которого читаю.
Так возвращается 0 если нет данных для чтения (нормально), 1 если есть (тоже нормально), но почему-то 1 (а не -1) если сокет закрыть со стороны клиента.
Код:
k := select(0, nil, @FDSet, nil, @TimeVal);
if k = 0 then
      result := true;
так вообще всегда возвращается 1, даже если сокет закрыт.

Текущий способ (первый) не работает, потому что если в течение N-ного времени передаются данные, то соединение слетает (у меня стоит 5 таких проверок по таймеру). Второй - и говорить нечего.

Прошу помочь. Уже не представляю что еще может быть не так.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием