关于 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
00
相似问题