标签:soc 改变 add ref set zh-cn map .com ddr
在双栈操作系统上,IPV6的套接字可以访问IPV4与IPV6的协议栈。所以只用创建一个IPV6 Socket,就可以接受来自IPv4和IPv6的连接。接受的IPv4的连接,会做IPv4到IPv6的地址转换(IPv4-mapped),以适应IPv6的数据结构。
有时我们用netstat看到服务只监听在IPv6的通配地址上,却可以接受IPv4的连接就是这样道理。(见参考1)
禁用ipv6的Socket接受IPv4的连接的方法,对于C,C++等程序,可以通过setsocketopt选项IPV6_V6ONLY来完成,这样ipv6的Socket就不再接受IPv4的连接。
然而对于Java程序,目前无法做到。只能通过更改linux配置,来改变系统层面Socket的默认行为:
例如: echo “1” > /proc/sys/net/ipv6/bindv6only
特殊之处:0.0.0.0仍然可以做ipv6的通配符来用
serverSocket.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 8080))
暂未深究。
https://www.cnblogs.com/wlzjdm/p/8684202.html
https://docs.microsoft.com/zh-cn/windows/desktop/WinSock/dual-stack-sockets
标签:soc 改变 add ref set zh-cn map .com ddr
原文地址:http://blog.51cto.com/guojuanjun/2149649