lihuinan 2017-08-28 07:38 采纳率: 0%
浏览 987

为什么glibc2.23要修改struct sockaddr_storage?

glibc在2.23版本有一个修改https://patchwork.sourceware.org/patch/12453/.
在我的Cotex A7上试验:
修改前:

 struct sockaddr_in6
{
sin6_family;   //0th byte
sin6_port;     //2nd byte
sin6_flowinfo; //4th byte
sin6_addr;     //8th byte
...
};

struct sockaddr_storage
{
ss_family;    //0th byte
__ss_align;   //4th byte
__ss_padding; //8th byte
};

修改后:

 struct sockaddr_storage
{
ss_family;    //0th byte
__ss_padding; //2nd byte
__ss_align;   //124th byte
};

这次合入把sockaddr__storage结构中的__ss_align和__ss_padding交换了位置。
这样会导致以前常用的下列类型强转的用法出现问题:_

  struct sockaddr_storage prefix_addr
 (struct sockaddr_in6 *)&(prefix_addr)->sin6_addr.s6_addr 

请问有没有人能看出glibc这个修改是什么用意?
我上述的强转用法是否本身就不规范(虽然glibc2.23之前一直运行稳定)。

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2018-05-22 15:45
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用