acoder吧 关注:146贴子:833
  • 0回复贴,共1

IPv4套接字地址结构里的sin_addr字段为什么是一个结构而不仅仅

只看楼主收藏回复

IPv4套接字地址结构里的sin_addr字段是一个 in_addr 结构,而in_addr结构在<netinet/in.h>的定义如下:
struct in_addr{ in_addr_t s_addr ;}
而IPv4套接字地址结构定义如下:
struct sockaddr_in{ uint8_t sin_len ; sa_family_t sin_family ; in_port_t sin_port ; struct in_addr sin_addr ; char sin_zero(8) ;}
整个in_addr结构里只有一个 in_addr_t 类型的数据。
那么IPv4套接字地址结构里的sin_addr字段为什么是一个结构而不仅仅是一个in_addr_t类型的无符号长整数?
《unix网络编程》中解释如下:
早期的版本(4.2BSD)把in_addr结构定义为多种结构的联合(union),允许访问一个32位IPv4地址中的所有4个字节,或者访问它的2个16位值。这用在地址被划分成 A ,B和C 三类的时期,便于获取地址中的适当字节。然而随着子网划分技术的来临和无类地址编排的出现,各种地址地址类正在消失,那个联合已不再需要了。如今大多数系统已经废除了该联合,转而把in_addr定义为仅有一个in_addr_t 字段的结构。
转载自: http://acoder.cc/Article/view/aid/525.html


1楼2015-09-15 08:48回复