特别是 sin_addr 似乎位于 IPv4 和 IPv6 套接字寻址的不同内存位置。这导致奇怪:
#include <stdio.h>
#include <netinet/in.h>
int main(int argc, char ** argv) {
struct sockaddr_in sa;
printf("sin_addr in sockaddr_in = %p\n", &sa.sin_addr);
printf("sin_addr in sockaddr_in6 = %p\n", &((struct sockaddr_in6*)&sa)->sin6_addr);
};
输出:
sin_addr in sockaddr_in = 0x7fffa26102b4
sin_addr in sockaddr_in6 = 0x7fffa26102b8
为什么这两个值不一样?
由于 this 指向相同的数据(要连接的地址),因此应该位于相同的地址。否则,您应该如何使用您不知道是 IPv4 或 IPv6 的 sockaddr_in 调用 inet_ntop ?