1.sockaddr_un
该结构用于系统通讯,同一台主机上客户端和服务器通讯
Unix域协议并不是一个实际的协议族,它只是在同一台主机上进行客户-服务器通信时,使用与在不同主机上的客户和服务器间通信时相同的API(套接口或XTI)的一种方法。当客户和服务器在同一台主机上时,Unix域协议是IPC通信方式的一种替代品。
Unix域提供了两种类型的套接口:字节流套接口(与TCP类似)和数据报套接口(与UDP类似)。
// 在《sys/un.h>头文件中定义的Unix域套接口地址结构
struct sockaddr_un
{
uint8_t sun_len;
sa_family_t sun_family; /* AF_LOCAL */
char sun_path[104]; /* null-terminated pathname */
};
==============================
2.sockaddr
该结构用于IPV4协议和IPV6协议
sa_family是地址家族,一般是“AF_xxx”的形式。通常大多用的是都是AF_INET和AF_INET6。
sa_data是14字节协议地址。
数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息,兼容IPv4和IPv6
struct sockaddr //通用地址结构体(兼容ipv4和ipv6)
{
unsigned short sa_family; //地址协议类型 AF_INET或者AF_INET6
char sa_data[14]; //存放要绑定的ip和端口号
}
================================
3.sockaddr_in
该结构专门用于IPV4协议
sin_family指代协议族,在socket编程中只能是AF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
s_addr按照网络字节顺序存储IP地址
struct sockaddr_in //ipv4地址结构体(专门用来存放ipv4地址)
{
short int sin_family; //存放地址协议族 AF_INET
unsigned short int sin_port; //存放你要绑定的端口号
struct in_addr sin_addr; //结构体嵌套,存放你要绑定的ipv4地址
unsigned char sin_zero[8]; /* Same size as struct sockaddr */
}