在Windows上绑定IPv6服务器套接字

Mar*_*wis 5 java windows ipv6 windows-7

我尝试使用此片段在Windows 7上绑定Java 1.6中的IPv6服务器套接字:

ssock = ServerSocketChannel.open();
ServerSocket sock = ssock.socket(); 
sock.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[16]), 0));
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会因IOException而失败:协议族不支持的地址族:bind

我知道Java的编写假设Windows使用单独的v4和v6堆栈(即使Windows 7没有),因此绑定v4和v6的单个套接字也无法工作.但是,这不是我想要做的:我只想将v6套接字绑定到任何地址(即::).

编辑:Vista上也失败了.

我究竟做错了什么?

Mar*_*wis 7

我找到了解决方案; 它是bug 6230761.创建IPv6服务器套接字通道的唯一受支持的方法是首先创建serversocket:

ServerSocket s = new ServerSocket();
s.bind(new InetSocketAddress(InetAddress.getByName("::"), 0));
Run Code Online (Sandbox Code Playgroud)

编辑:这意味着NIO实际上不能与IPv6一起使用.