我目前正在使用VS 2013在Windows 8上编写一个简单的套接字服务器,并希望它使用以下套接字初始化代码监听0.0.0.0和[::]:
int sock;
struct sockaddr_in6 addr;
memset(&addr, 0x0, sizeof(struct sockaddr_in6));
addr.sin6_family = AF_INET6;
addr.sin6_addr = in6addr_any;
addr.sin6_port = htons((uint16_t) myPort);
sock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
if (sock == -1) {
fprintf(stderr, "\nsocket call failed\n");
WSACleanup();
return(1);
}
int off= 0;
setsockopt(sock, SOL_SOCKET, IPV6_V6ONLY, (void *)&off, sizeof(off));
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&on, sizeof(on));
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on));
ioctlsocket(sock, FIONBIO, &iMode);
rc = bind(sock, (const struct sockaddr*)&addr, sizeof(addr))
然而,当我启动我的应用程序时,它似乎只是使用我指定的端口监听[::]而不是0.0.0.0。
编辑:当我在同一主机上启动客户端应用程序并告诉它使用IP地址127.0.0.1连接到我的套接字服务器应用程序时,我收到连接拒绝错误。如果我指定:: 1,那么我就能连接到我的服务器应用程序。
制作双堆栈插槽是否需要其他配置?