Все никак не разберусь. Вот подробный отчёт:
Код:
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 таких проверок по таймеру). Второй - и говорить нечего.
Прошу помочь. Уже не представляю что еще может быть не так.