我尝试使用以下片段在 Windows 7 上的 Java 1.6 中绑定 IPv6 服务器套接字:
ssock = ServerSocketChannel.open();
ServerSocket sock = ssock.socket();
sock.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[16]), 0));
不幸的是,这失败了 IOException: Address family not supported by protocol family: bind
我知道编写 Java 时假设 Windows 使用单独的 v4 和 v6 堆栈(即使 Windows 7 没有),因此为 v4 和 v6 绑定单个套接字是行不通的。但是,这不是我想要做的:我只想将 v6 套接字绑定到任意地址(即 ::)。
编辑:它在 Vista 上也失败了。
我究竟做错了什么?