我正在阅读 Beej 的指南,他谈到了程序员创建的不同结构体。他说我们可以把 sockaddr_storage/in6/in 传给 addrinfo,它会被转换成 sockaddr,但究竟怎么可能呢?sockaddr 是 16 字节,而 sockaddr_in6 是 28 字节。
我阅读了 RFC 3493 的一小部分:
请注意,sockaddr_in6 结构通常比
通用 sockaddr 结构大。在许多现有的实现中,sizeof(struct sockaddr_in) 等于 sizeof(struct sockaddr),两者
都是 16 字节。
在转换为 IPv6 时,需要仔细检查任何做出此假设的现有代码。
但是它没有解释当 sockaddr_in6 被强制转换为 sockaddr 时会发生什么。