日期:2014-05-16  浏览次数:20821 次

sockaddr 和sockaddr_in6的转换问题
几个结构体定义是这样的:
struct sockaddr {
        sa_family_t        sa_family;        /* address family, AF_xxx        */
        char                sa_data[14];        /* 14 bytes of protocol address        */
};


struct sockaddr_in {
  sa_family_t                sin_family;        /* Address family                */
  unsigned short int        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_in6 {
        unsigned short int        sin6_family;    /* AF_INET6 */
        __u16                        sin6_port;      /* Transport layer port # */
        __u32                        sin6_flowinfo;  /* IPv6 flow information */
        struct in6_addr                sin6_addr;      /* IPv6 address */
        __u32                        sin6_scope_id;  /* scope id (new in RFC2553) */
};

sockaddr_in同sockaddr 相互转换好理解,
我迷惑的是,sockaddr 和sockaddr_in6所占的位数不同,大小不一样,为什么能相互转换?