TTCPBlockSocket CanRead постоянно true

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TTCPBlockSocket CanRead постоянно true

Сообщение and_rivne » 12.10.2018 12:31:47

Держу открытый сокет для подключений:
Код: Выделить всё
Socket.Bind('0.0.0.0','57777');
Socket.setLinger(true,10000);

проверяю есть ли новый клиент:
Код: Выделить всё
repeat
if Socket.CanRead(100) then
       begin
       ......
       end;
until Terminated;

Но в при наступлении какого-то момента Socket.CanRead(100) всегда стает true и цикл "зацыкливает". Видимо срабатывают ограничения ОС. Но ошибок никаких нет в Socket.LastError.
На линухе это достигается примерно на 460 коннекте.
На винде такого дождаться не могу. Но не факт, видимо и тут есть ограничение, просто, число побольше.

Как отловить такой момент?

Добавлено спустя 1 час 46 минут 22 секунды:
Нашел как изменить лимиты в системе.
Просмотр текущих лимитов:
Код: Выделить всё
ulimit -n

Изменять нужно файл
Код: Выделить всё
vi /etc/security/limits.conf

Но это не решает саму проблему. Нужно понимать, что программа уперлась в лимит.
and_rivne
новенький
 
Сообщения: 20
Зарегистрирован: 09.12.2011 13:40:42

Re: TTCPBlockSocket CanRead постоянно true

Сообщение olegy123 » 12.10.2018 14:19:37

Скорее данные потекли.. Указатели не на то ссылаются.. Работаете с мусором или мертвым объектом как с живым..
Даже TList может "переполнится" Insert/Delete одного элемента
и все производные... если его вовремя не Pack();

Добавлено спустя 3 минуты 15 секунд:
Вариантов много..
Если код написан правильно и нормально работает с одним/двумя экземплярами.. а во множестве начинает глючить - скорее работа с созданием/удалением не совсем правильная.. созданием удалением переменых в объектах тоже нужно проследить.. Это первый признак протечки..

Добавлено спустя 4 минуты 49 секунд:
Параметры проекта -> параметры компилятора -> отладка : включить Heaptrc
olegy123
энтузиаст
 
Сообщения: 1156
Зарегистрирован: 25.02.2016 12:10:20

Re: TTCPBlockSocket CanRead постоянно true

Сообщение and_rivne » 12.10.2018 15:23:27

olegy123
Параметры проекта -> параметры компилятора -> отладка : включить Heaptrc

Не нахожу такого.
http://joxi.ru/YmEGNz8u0WLQbA
and_rivne
новенький
 
Сообщения: 20
Зарегистрирован: 09.12.2011 13:40:42

Re: TTCPBlockSocket CanRead постоянно true

Сообщение Снег Север » 12.10.2018 17:13:46

Это здесь:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 1366
Зарегистрирован: 27.11.2007 16:14:47

Re: TTCPBlockSocket CanRead постоянно true

Сообщение MysticCoder » 13.10.2018 01:43:37

and_rivne писал(а):Но в при наступлении какого-то момента Socket.CanRead(100) всегда стает true и цикл "зацыкливает". Видимо срабатывают ограничения ОС. Но ошибок никаких нет в Socket.LastError.
На линухе это достигается примерно на 460 коннекте.


что то не пойму, становится true, значит клиент есть. зачем интерпретировать как то иначе? если клиента на самом деле нету, то почему бы об этом не сказать мол после CanRead = True Accept не срабатывает или что то типа того?
А вообще залезь пошагово в этот CanRead когда он неправильно себя ведет и посмотри где он сворачивает не туда. Я там как то ошибку нашел иль неправильное поведение связанное с SSL коннектами...
MysticCoder
постоялец
 
Сообщения: 146
Зарегистрирован: 14.09.2013 00:20:28


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru