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);

}

}