andrewlekar 0 6 октября, 2011 Опубликовано 6 октября, 2011 · Жалоба Больше не знаю, где задать этот вопрос... Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо. Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется. Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gormih 0 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Больше не знаю, где задать этот вопрос... Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо. Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется. Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1. Исчезновение линка происходит не мнгновенно, это надо понимать... Если ты дал команду на закрытие линка, а после команду на зарытия сокета - это вовсе не значит, что вначале закроется линк, а потом сокет. Из за этого и память утекает. Рекомендуется делать паузу ... на сколько большую - зависит от платформы и ОС :-) И кстати под QT такой проблемы быть не может в принципе. :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 10 октября, 2011 Опубликовано 10 октября, 2011 · Жалоба Я не делаю команды на закрытие линка, а тупо выдергиваю кабель из свитча. Сокет же закрывается как раз тогда, когда обнаруживает пропадание линка, так что совершенно точно сначала закрывается линк, а потом сокет. Паузу делать я пробовал (у lwIP есть tcp_slowtmr который закрывает висящие соединения), но так как соединение считается активным, то пауза не помогает. QT мне пихать некуда - у меня 64 Кб ОЗУ на всё про всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться