双栈Windows 8套接字服务器仅绑定到[::]

时间:2016-02-03 19:51:23

标签: windows sockets winsock ipv6

我目前正在使用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,那么我就能连接到我的服务器应用程序。

制作双堆栈插槽是否需要其他配置?

0 个答案:

没有答案