sockaddr与sockaddr_in

来源:互联网 发布:python对比java 编辑:程序博客网 时间:2024/06/08 11:36
typedef unsigned short sa_family_t;
struct sockaddr {
sa_family_t sa_family; /* 地址簇,AF_XXX */
char sa_data[14];      /* 14字节的协议地址,分别为端口号和IP地址*/
}
(PS:sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。)

struct sockaddr_in {
  sa_family_t sin_family;/* Address family*/
  __be16 sin_port;/* Port number*/
  struct in_addr sin_addr;/* Internet address*/

  /* Pad to size of `struct sockaddr'. */
  unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};
||
\/
struct sockaddr_in {
  sa_family_t sin_family;/* Address family*/
  __be16 sin_port;/* Port number*/
  struct in_addr sin_addr;/* Internet address*/

  unsigned char sin_zero[8] ;/* 填充0 以保持与struct sockaddr同样大小*/
};

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