关于 sockaddr 引用 sockaddr_in6 和 sockaddr_storage 时为什么不会出现内存溢出

来源:7-2 ADM的创建

奕帝传说_梦

2024-10-14

从老师的课件就可以观察到,我们调用的时候都会给一个名为 addrlen 的变量,从名称就知道它是标识 sockaddr 的长度的,那必然不会溢出呀。

但其实我觉得没必要,因为填充位的存在,每一种 struct 的长度不都定死了嘛,直接通过 ss_family 判断协议族,然后在系统内部实现就可以写死它的长度是多少了(不考虑可扩展性的话),毕竟 ss_family 必定是前两个字节。

写回答

1回答

李超

2024-11-14

是的,sockaddr_storage 是一个缓冲区,它的空间足可以容纳 IPv4 或IPV6 地址。而sockaddr 只是一个指针,它本身不能存储数据, 但可以让它指向sockaddr_storage 拿到family, 再根据family判定是IPv4还是IPv6,从而将sockaddr_storage 转成sockaddr_in 或 sockaddr_in6

0
0

WebRTC源码级深度解析,进阶大厂高级音视频开发者

音视频领域资深讲师授课,带你领略优秀开源库精妙所在

663 学习 · 256 问题

查看课程