【发布时间】:2012-01-14 16:10:02
【问题描述】:
我将一个套接字绑定到我的地址以监听连接。为此,我使用getaddrinfo() syscall 获取我的地址信息,这使我能够以一种独立于IP 的方式来做我想做的事。问题是这个系统调用返回的结构的 ip 地址字段都是空白的。例如:
struct addrinfo hints, *servinfo, *p;
int sock;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, port, &hints, &servinfo)
for (p = servinfo; p != NULL; p = p->ai_next)
if (p->ai_family == AF_INET6)
break;
sock = socket(p->ai_family, p->sock_type, p->protocol);
bind(sock, p->ai_addr, p->ai_addrlen)
在上面的代码中。由于绑定成功,*p 变量应该包含有关我机器的 IPv6 地址的某种信息,但字段 p->ai_addr->sin6_addr(假设这将在没有强制转换的情况下工作)为空白。我怎样才能确切知道我将使用哪个地址?
【问题讨论】: