UDP+TCP на LwIP работает прекрасно. Выше наверное не удается
аллоцировать память для pbuf'а, -1 это ЕМНИП ошибка аллокации у
LwIP. Скорее всего потому что у тебя течет память, потому что текут pbuf'ы, так как это основная единица LwIP. Как только ты начинаешь "дубасить" каждые 100мс у тебя быстро кончается память.
pbuf нужно освобождать после того как а) Ты аллоцировал pbuf б) Но что не очевидно, после того как pbuf прилетает внутрь в callback'ах
Переключи макросом аллокацию памяти, вместо malloc используй MEMORY POOL.
На сайте разработки LwIP есть примеры, в примерах видно как работать с pbuf
Для отладки работы LwIP с pbuf в LwIP можно включить отладочное макро.
Но лучше прошагать внутрь LwIP пошагово в режиме отладки. Да, код лапшистый, но не фатально, чуть больше терпения. В LwIP прекрасно видно места где он возвращает ошибки, но наверное это будет код где LwIP внутри себя аллоцирует pbuf и не может этого сделать так как кончилась память.