TTL 为0_udp


WireShark 抓包TTL为0,DSP+UDP。

貌似是未 udp_remove释放内存的问题。

udp_new 申请的堆内存需要用 udp_remove 释放。

struct udp_pcb * udp_new(void)
{
struct udp_pcb *pcb;

LWIP_ASSERT_CORE_LOCKED();

pcb = (struct udp_pcb *)memp_malloc(MEMP_UDP_PCB);
/* */
if (pcb != NULL)
{
memset(pcb, 0, sizeof(struct udp_pcb));
pcb->ttl = UDP_TTL;
}
return pcb;
}


void udp_remove(struct udp_pcb *pcb)
{
struct udp_pcb *pcb2;

LWIP_ASSERT_CORE_LOCKED();

LWIP_ERROR("udp_remove: invalid pcb", pcb != NULL, return);

mib2_udp_unbind(pcb);
/* 如果UDP控制块在链表的首部 */
if (udp_pcbs == pcb)
{
/* 删除它 */
udp_pcbs = udp_pcbs->next;

}
/* 如果UDP控制块不在链表的首部 */
else
{
for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next)
{
/* 变量链表找到要删除的UDP控制块 */
if (pcb2->next != NULL && pcb2->next == pcb)
{
/* 找到了就删除它 */
pcb2->next = pcb->next;
break;
}
}
}
//释放内存
memp_free(MEMP_UDP_PCB, pcb);
}