6.3 释放网络适配器列表的实现
下面将会通过实例重点介绍pcap_freealldevs函数。
由pcap_findalldevs_ex函数或pcap_findalldevs函数返回的网络适配器设备列表,必须调用pcap_freealldevs函数来释放。pcap_freealldevs函数的原型如下:
void pcap_freealldevs(pcap_if_t*alldevsp)
pacp_freealldevs中的参数alldevsp为所需释放的设备列表。
pacp_freealldevs函数的主要实现代码如下:
void pcap_freealldevs(pcap_if_t*alldevs)
{
pcap_if_tcurdev,nextdev;
pcap_addr_tcuraddr,nextaddr;
/遍历列表,释放各结点所占用的资源/
for(curdev=alldevs;curdev!=NULL;curdev=nextdev){
nextdev=curdev->next;
//释放所有的地址占用的内存资源
for(curaddr=curdev->addresses;curaddr!=NULL;
curaddr=nextaddr)
{
nextaddr=curaddr->next;
if(curaddr->addr)
free(curaddr->addr);
if(curaddr->netmask)
free(curaddr->netmask);
if(curaddr->broadaddr)
free(curaddr->broadaddr);
if(curaddr->dstaddr)
free(curaddr->dstaddr);
free(curaddr);
}
//释放适配器的名称占用的内存资源
free(curdev->name);
//释放适配器描述占用的内存资源
if(curdev->description!=NULL)
free(curdev->description);
//释放该结点
free(curdev);
}
}