我正在试验IPv6套接字,尤其是在Windows Vista和更高版本上提供的“双栈”功能,显然在Unix上默认情况下。我发现当我将服务器绑定到特定的IP地址或本地计算机的主机名解析时,我无法接受来自IPv4客户端的连接。当我绑定到INADDR_ANY但是,我可以。将IPv4客户端连接到IPv6服务器:连接被拒绝
请为我的服务器考虑下面的代码。你可以看到,我按照创建一个IPv6套接字,那么IPV6_V6ONLY标志设置为零的微软的建议是:
addrinfo* result, *pCurrent, hints;
memset(&hints, 0, sizeof hints); // Must do this!
hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; // We intend to use the addrinfo in a call to connect(). (I know it is ignored if we specify a server to connect to...)
int nRet = getaddrinfo("powerhouse", "82", &hints, &result);
SOCKET sock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
int no = 0;
if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&no, sizeof(no)) != 0)
return -1;
if