Перейти к содержанию
    

вопрос по lwIP

Больше не знаю, где задать этот вопрос...

Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо.

Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется.

Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Больше не знаю, где задать этот вопрос...

Заметил у lwIP такую проблему, что если при пропадании линка закрывать сокет, а при восстановлении линка создавать его заново, валятся ошибки выделения памяти MEMP_TCP_PCB. Проблема, судя по всему, в том, что при пропадании линка сокет остаётся активным и не может корректно закрыться. При последуюшем создании сокета обнаруживается, что больше свободных сокетов нет и после принудительного удаления активного соединения всё создается как надо.

Проблема не очень серьёзная, но хотелось бы выяснить, как её обойти, и у всех ли она проявляется.

Для проверки попробуйте создавать сокет после появления линка, закрывать через close после исчезновения линка. Ограничьте память до одного сокета: MEMP_NUM_TCP_PCB = 1.

Исчезновение линка происходит не мнгновенно, это надо понимать... Если ты дал команду на закрытие линка, а после команду на зарытия сокета - это вовсе не значит, что вначале закроется линк, а потом сокет. Из за этого и память утекает.

Рекомендуется делать паузу ... на сколько большую - зависит от платформы и ОС :-)

И кстати под QT такой проблемы быть не может в принципе. :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не делаю команды на закрытие линка, а тупо выдергиваю кабель из свитча. Сокет же закрывается как раз тогда, когда обнаруживает пропадание линка, так что совершенно точно сначала закрывается линк, а потом сокет. Паузу делать я пробовал (у lwIP есть tcp_slowtmr который закрывает висящие соединения), но так как соединение считается активным, то пауза не помогает. QT мне пихать некуда - у меня 64 Кб ОЗУ на всё про всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...