一.套接字地址结构 1.1 IPv4套接字地址结构 ——套接字地址结构大小至少都是16字节 struct in_addr{ in_addr_t s_addr; //uint32_t } struct sockaddr_in{ uint8_t sin_len; //结构的长度,IPv4至少16字节 sa_family_t sin_family; //uint8_t uint16_t AF_INET in_port_t sin_port; //uint16_t struct in_addr sin_addr; //uint32_t char sin_zero[8]; //未使用,置0 } 1.1.1结构中的元素 1)常用数据类型 2)地址结构中的数据类型 ①sin_len是套接字地址结构中的长度字段,并不是所有厂家都支持;即使有长度字段,我们也无需设置和检查它,除非涉及路由套接字。 它的数据类型典型为uint_t; ②sin_family ,sin_addr , sin_port 是地址结构中必要的字段;现在几乎所有的实现都增加了sin_zero字段,但一般未使用,只是将它置为0。 ③sa_family_t在支持长度字段时,是uint8_t ,在不支持时,是一个uint16_t 类型。 1.1.2 ★★★注意点★★★ 1)TCP或UDP端口号在套接字地址结构中总是以网络字节序存储(大端); 2)IPv4地址的不同访问方法,假设serv是一个网际套接字地址结构,那么serv.sin_addr 是按in_addr结构引用其中的32位IP地址;而serv.sin_addr.s_addr将按in_addr_t引用IP地址。 1.2 通用套接字地址结构 ——用于强制转换特定协议的套接字地址结构 struct sockaddr{ uint8_t sa_len; sa_family_t sa_family; char sa_data[14]; }; 1)套接字地址结构总是以引用的方式传递给套接字函数。 1.3 IPv6 套接字地址结构 |
|