前言
网络编程是程序连接网络拓展的基础,尤其是在物联网、互联网加等概念火热的当下,网络编程能力体现了一个程序员能否具有大型程序的开发能力。这里通过详细例子解析structifreq和structsockaddr_in结构体,这两个结构体通常是配合使用,建立socket连接然后把ifeq作为数据源调用ioctl函数与内核交互,通过数据类型转换,将ifeq数据内容赋值给sockaddr_in,进而能实现获取或设置IP地址、MAC地址、子网地址、广播地址等网络参数。
struct ifreq
struct ifreq结构体使用时需要加入头文件#include<net/if.h>,跟头文件查询其定义,它由一个字符数组和共用体构成,以下是它的声明:
struct ifreq {
char ifr_name[IFNAMSIZ]; //interface name
union
{
struct sockaddr ifru_addr; //address
struct sockaddr ifru_dstaddr; //other wnd of p-p Ink
struct sockaddr ifru_broadaddr; //broadcast address
struct sockaddr ifru_netmask; //interface net mask
struct sockaddr ifru_hwaddr; //MAC address
short int ifru_flags; //flags
int ifru_ivalue; //link bandwith
int ifru_mtu; //mtu
struct ifmap ifru_map; //device man
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ]; //new name
__caddr_t ifru_data; //for use by interface
} ifr_ifru;
};
其中ifr_name是用来配置网卡的,ifru_addr、ifru_broadaddr、ifru_netmask、ifru_hwaddr则分别是配置IP、广播地址、子网掩码、网卡硬件地址的,这几项在网络编程中使用频率很高,最好熟练掌握。
Socketaddr与socketaddr_in
Socketaddr与