Не получает подтверждения.
Сделал вывод вспомогательной инфы
void tcp_go( struct tcp_pcb *t) { printf(", %hu", t->snd_buf ); printf(", %hu", t->snd_queuelen ); printf(", [%hu", t->unsent->len ); printf(", %hu", t->unacked->len ); printf(", %hu]", t->ooseq->len ); printf(".\r\n"); }
Хорошая жизнь заканчивается таким комбо:
- {L177:4 0} , 1440, 4, [1460, 29777, 29777].
{L177:4 0} , 416, 4, [1044, 1460, 29777].
{L177:4 0} , 1744, 4, [1460, 29777, 29777].
{L177:4 0} , 720, 5, [1460, 29777, 29777].
{L177:6 1} , 720, 5, [1460, 29777, 29777].
{L177:6 2} , 720, 5, [1460, 29777, 29777].
{L177:6 3} , 720, 5, [1460, 29777, 29777].
memp_malloc: out of memory in pool PBUF_POOL
То, что в фигурных скобках - номер строки исходника, код флагов события(аномальщины), потом буфер отправки, длина очереди, а потом длины имеющегося, неподтверждённого, вне последовательности.
Можно как-то попросить LwIP отправлять заново пакеты при превышении значения в буфере выше заданного? Или такие вопросы лучше к авторам либы?
Насколько вероятно, что виндовый порт netcat проморгал пришедшие пакеты и потому не отправил ACK?