【发布时间】:2012-10-20 20:44:38
【问题描述】:
特别是 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 ?
【问题讨论】: