IPv4和IPv6互操作问题

本文探讨了在实现IPv6支持时遇到的IPv4与IPv6互操作问题。通过引用《UNIX网络编程》中关于使用IPv6通配地址绑定套接字的方法,作者发现在Windows XP上此方法无法让IPv6套接字监听IPv4连接。进一步研究发现,从Windows Vista开始,系统提供了IPv6套接字监听IPv4和IPv6流量的能力,这依赖于`IPV6_V6ONLY`选项。在XP上尝试设置该选项会导致错误,而在Win 7上则能成功实现同时监听。
摘要由CSDN通过智能技术生成

      最近在给程序添加IPv6支持,因此遇到了IPv4与IPv6互操作的问题。

     《UNIX网络编程》上提到,只要给Socket绑定IPv6的通配地址,就可以在双栈协议的机器上用一个IPv6套接字同时监听IPv4和IPv6端口:

       struct   sockaddr_in6   tempAddr;
       memset(&tempAddr,0,sizeof(tempAddr));
       tempAddr.sin6_port=htons(localPort);
       tempAddr.sin6_family   =   AF_INET6;
       tempAddr.sin6_addr   =   in6addr_any;
       ret   =   bind(s,(sockaddr   *)&tempAddr,sizeof(tempAddr));

     但是我在测试的时候,却发现IPv4的客户端无法向IPv6服务端发起连接,connect返回结果是10061,即“目标机器积极拒绝”。出现这个错误表明目标机器的端口没有被监听,也就是说实际上IPv6套接字没有在监听IPv4的连接。同时,如果我把服务端和客户端都改成IPv4或者IPv6,两者能够正常通信。

     这就跟书上说的不一致了,查了很多资料,发现,微软是这么说的:

     “In order to support both IPv4 and IPv6 on Window
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值