struct sockaddr {
unsigned short sa_family; // 2 bytes address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
// IPv4 AF_INET sockets:
struct sockaddr_in {
short sin_family; // 2 bytes e.g. AF_INET, AF_INET6
unsigned short sin_port; // 2 bytes e.g. htons(3490)
struct in_addr sin_addr; // 4 bytes see struct in_addr, below
char sin_zero[8]; // 8 bytes zero this if you want to
};
struct in_addr {
unsigned long s_addr; // 4 bytes load with inet_pton()
};
1.sockaddr_in是程序员用的,sockaddr是操作系统用的
2.我们难以对sockaddr的char[14]的数组赋值,而对sockaddr_in的sin_port和sin_addr赋值则方便的多;
3.函数接口基本都是用sockaddr
4.当我们对sockaddr_in赋值完后,再将其强制转换为sockaddr交给函数使用
sockaddr_in6:
https://blog.csdn.net/albertsh/article/details/80991684