andrewlekar 0 October 6, 2011 Posted October 6, 2011 · Report post Больше не знаю, где задать этот вопрос... Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо. Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется. Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1. Quote Share this post Link to post Share on other sites More sharing options...
gormih 0 October 7, 2011 Posted October 7, 2011 · Report post Больше не знаю, где задать этот вопрос... Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо. Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется. Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1. Исчезновение линка происходит не мнгновенно, это надо понимать... Если ты дал команду на закрытие линка, а после команду на зарытия сокета - это вовсе не значит, что вначале закроется линк, а потом сокет. Из за этого и память утекает. Рекомендуется делать паузу ... на сколько большую - зависит от платформы и ОС :-) И кстати под QT такой проблемы быть не может в принципе. :-) Quote Share this post Link to post Share on other sites More sharing options...
andrewlekar 0 October 10, 2011 Posted October 10, 2011 · Report post Я не делаю команды на закрытие линка, а тупо выдергиваю кабель из свитча. Сокет же закрывается как раз тогда, когда обнаруживает пропадание линка, так что совершенно точно сначала закрывается линк, а потом сокет. Паузу делать я пробовал (у lwIP есть tcp_slowtmr который закрывает висящие соединения), но так как соединение считается активным, то пауза не помогает. QT мне пихать некуда - у меня 64 Кб ОЗУ на всё про всё. Quote Share this post Link to post Share on other sites More sharing options...
RusikOk 1 March 26 Posted March 26 · Report post я из будущего. у меня такая же проблема( поделитесь пожалуйста решением Quote Share this post Link to post Share on other sites More sharing options...
kolobok0 5 March 28 Posted March 28 · Report post On 3/26/2026 at 1:44 PM, RusikOk said: я из будущего. у меня такая же проблема( поделитесь пожалуйста решением Определение линка: Детектирует (обычно) внешняя физика(та микросхемка, что стоит между МК и согласующим трансформатором). Далее у Вас две возможности: - запрограммировать эту микросхемку на использовании линии прерывания на потерю линка, и обеспечить со стороны МК реакцию на данное прерывание. В некоторых китайских бордах выход с прерывания данной микросхемки висит в воздухе - если у Вас такой случай, то см. второй вариант. - либо постоянно полить (периодически опрашивать эту микросхемку на нужное Вам событие). Более детально - надо смотреть даташит на эту микросхемку. По поводу закрытия сокета в lwIp: В кишках данной либы нету куска (информация возможно устаревшая) принудительного закрытия сокета при протухании времени подтверждённого обмена. По мне - кто то подшутил из разрабов и тупо этот кусок убрал. Хотя возможно это отголосок подхода явного управления памятью для МК. Народ обычно делает два раза, два раза закрытие и тогда участок памяти под сокет освобождается (сам так не делал, но на этом форуме можете найти такое поведение, я же - тупо восстановил протухание. Там не сложно пару - ифов в общей простыне изменения стэйт состояния). с уважением (круглый) 1 Quote Share this post Link to post Share on other sites More sharing options...