Jump to content
    

вопрос по lwIP

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

я из будущего. у меня такая же проблема( поделитесь пожалуйста решением

Share this post


Link to post
Share on other sites

On 3/26/2026 at 1:44 PM, RusikOk said:

я из будущего. у меня такая же проблема( поделитесь пожалуйста решением

Определение линка:

Детектирует (обычно) внешняя физика(та микросхемка, что стоит между МК и согласующим трансформатором). Далее у Вас две возможности:
- запрограммировать эту микросхемку на использовании линии прерывания на потерю линка, и обеспечить со стороны МК реакцию на данное прерывание. В некоторых китайских бордах выход с прерывания данной микросхемки висит в воздухе - если у Вас такой случай, то см. второй вариант.
- либо постоянно полить (периодически опрашивать эту микросхемку на нужное Вам событие). Более детально - надо смотреть даташит на эту микросхемку.

 

По поводу закрытия сокета в lwIp:

В кишках данной либы нету куска (информация возможно устаревшая) принудительного закрытия сокета при протухании времени подтверждённого обмена. По мне - кто то подшутил из разрабов и тупо этот кусок убрал. Хотя возможно это отголосок подхода явного управления памятью для МК. Народ обычно делает два раза, два раза закрытие и тогда участок памяти под сокет освобождается (сам так не делал, но на этом форуме можете найти такое поведение, я же - тупо восстановил протухание. Там не сложно пару - ифов в общей простыне изменения стэйт состояния).

 

с уважением

(круглый)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...