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 如何实验stm32主通道和互补通道独立输出
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题