// sockaddr常用于bind、connect、recvfrom、sendto等函数的参数,指明地址信息,是一种通用的套接字地址。
// sockaddr_in 是internet环境下套接字的地址形式。所以在网络编程中我们会对sockaddr_in结构体进行操作,
// 使用sockaddr_in来建立所需的信息,最后使用类型转化就可以了。一般先把sockaddr_in变量赋值后,
// 强制类型转换后传入用sockaddr做参数的函数:sockaddr_in用于socket定义和赋值;sockaddr用于函数参数。
// struct sockaddr(套接字的普通C定义通用的地址结构)
// 一共 16 个字节
struct sockaddr {
sa_family_t sin_family; // 地址(协议)族(socket internet family) 2字节 socket网络编程一般值为 AF_INET
char sa_data[14]; // 14字节,包含套接字中的目标地址和端口信息
};
//struct sockaddr_in(IP专用的地址结构)
// 一共 16 个字节,为了解决 sockaddr 结构体将端口号和ip地址混在一起的问题
struct sockaddr_in {
sa_family_t sin_family;// 地址(协议)族(socket internet family) 2字节 socket网络编程一般值为 AF_INET
uint16_t sin_port;// 16位 TCP/UDP 端口号 2字节
struct in_addr sin_addr;// 32位 ipv4 地址 4字节
char sin_zero[8];// 空白数据,不使用
};
// struct in_addr
struct in_addr {
in_addr_t s_addr; // 32位 ipv4 地址 4字节
};
//TODO
socket接口与socket对象具体解析: https://blog.youkuaiyun.com/liuxingen/article/details/44995467