sockaddr与sockaddr_in


struct  sockaddr {

  unsigned short int  sa_family; /* address family, AF_xxx */

  char sa_data[14];  /* address */

  };

  sa_family是地址家族,是“AF_xxx”的形式。常设为“AF_INET”,代表Internet(TCP/IP)地址族。

  sa_data是协议地址,由sa_family决定。如果sa_family=AF_INET,则sa_data就是sockaddr_in的sin_addr和sin_port。换句话说,这时sockaddr可以当作sockaddr_in看。

  struct  sockaddr_in {

  short int sin_family; /* Address family */

  unsigned short int sin_port; /* Port number */

  struct in_addr sin_addr; /* Internet address */

  unsigned char sin_zero[8]; /*to make same size as struct sockaddr */

  };

  struct in_addr {

  unsigned long s_addr;

  };

  sin_family意义与sa_family同。

  sin_port存储端口号(使用网络字节顺序)

  sin_addr存储IP地址,使用in_addr这个数据结构

  sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。

  在 in_addr结构体中,s_addr按照网络字节顺序存储IP地址。

  sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr类型时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3