Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос по lwIP
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
andrewlekar
Больше не знаю, где задать этот вопрос...
Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо.
Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется.
Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1.
gormih
Цитата(andrewlekar @ Oct 6 2011, 14:15) *
Больше не знаю, где задать этот вопрос...
Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо.
Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется.
Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1.

Исчезновение линка происходит не мнгновенно, это надо понимать... Если ты дал команду на закрытие линка, а после команду на зарытия сокета - это вовсе не значит, что вначале закроется линк, а потом сокет. Из за этого и память утекает.
Рекомендуется делать паузу ... на сколько большую - зависит от платформы и ОС :-)
И кстати под QT такой проблемы быть не может в принципе. :-)
andrewlekar
Я не делаю команды на закрытие линка, а тупо выдергиваю кабель из свитча. Сокет же закрывается как раз тогда, когда обнаруживает пропадание линка, так что совершенно точно сначала закрывается линк, а потом сокет. Паузу делать я пробовал (у lwIP есть tcp_slowtmr который закрывает висящие соединения), но так как соединение считается активным, то пауза не помогает. QT мне пихать некуда - у меня 64 Кб ОЗУ на всё про всё.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.