TTL 为0
原创
©著作权归作者所有:来自51CTO博客作者wx5fc8832a61484的原创作品,请联系作者获取转载授权,否则将追究法律责任
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);
}