我想为我的程序添加 IPv6 支持,但遇到了奇怪的错误。我想打开接受连接的套接字。这是我的场景:
首先我使用 getaddrinfo() 来查找套接字配置:
struct addrinfo hint, *info = NULL;
memset((void *)&hint, 0, sizeof(hint));
hint.ai_family = AF_INET6;
hint.ai_flags = AI_PASSIVE | AI_NUMERICSERV;
hint.ai_socktype = SOCK_STREAM;
if ((error = getaddrinfo(NULL, "1234", &hint, &info))) {
/* some error handling */
}
我生成非 NULL 结果info
。然后我想创建套接字:
socket(info->ai_family, info->ai_socktype, info->ai_protocol)
我在这里得到-1
strerror(errno)
返回Address family not supported by protocol
我认为getaddrinfo()
它只返回可以绑定的地址,我希望它在这种情况下返回 NULL。我错过了什么?
我想补充一点,我的 eth0 现在没有 IPv6 地址。我正在使用 uClibc 0.9.32