当前位置:  技术问答>linux和unix

sockaddr 和sockaddr_in6的转换问题

    来源: 互联网  发布时间:2017-05-19

    本文导语:  几个结构体定义是这样的: struct sockaddr {         sa_family_t        sa_family;        /* address family, AF_xxx        */         char                sa_data[14];        /* 14 bytes of protocol add...

几个结构体定义是这样的:
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所占的位数不同,大小不一样,为什么能相互转换?

|


p==q,因为p和q都是指针变量,存储一个4字节的地址而已,我可以把那个地址开始的内存当做4字节的,也可以当做8字节的double,当然这个例子不太合适,因为如果当做8字节的double会越界int a。  

这一段和例子说的不对,改成这样:

int a;
int *p=&a;
double *q=(double*)&a;

然后理解那一段话,a所在的内存本来只有4字节合法,当做double会越界4字节,当然Int刚合适。

对于sockaddr,不会有越界问题,因为是传进去地址,根据family决定那个地址里存得到底是什么结构体。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • socket变成 sockaddr_un问题
  • linux网络套接字//accept参数为什么不用struct sockaddr结构体?
  • 关于sockaddr_ll.sll_ifindex
  • sockaddr在那个头文件里?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,