首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有Socket.Connect地址的IPv6引发“地址家族不受支持”错误

具有Socket.Connect地址的IPv6引发“地址家族不受支持”错误
EN

Stack Overflow用户
提问于 2010-09-24 10:26:52
回答 1查看 6.5K关注 0票数 2

我正在尝试执行一个Socket.Connect(),当我指定的IP地址是ipv6格式时,Socket.Connect()在错误消息中失败:

协议族不支持的地址族.使用了与请求的协议不兼容的地址。所有套接字都使用关联的地址系列(即因特网协议的AF_INET )和通用协议类型(即SOCK_STREAM)创建。如果在套接字调用中显式请求了不正确的协议,或者如果套接字使用了错误家族的地址(例如,在sendto中),则返回此错误。

但是,如果我在下面的代码段中取消注释,那么ipv4地址将用于连接,现在调用成功;注意,hostadd.AddressList返回一个ipv6地址。还请注意,我正在连接的Windows 7 64位计算机,这两者都启用了ipv4和ipv6;

为什么使用ipv6地址连接会引发错误?Socket.Connect()方法文档,用于:

如果启用了IPv6,并调用Connect(String,Int32)方法连接到解析为IPv6和IPv4地址的主机,则将在IPv4地址之前先尝试连接到IPv6地址。如果主机没有侦听IPv6 address.is,没有监听IPv6地址,这可能会延迟建立连接的时间。

代码语言:javascript
复制
                IPHostEntry hostadd = Dns.GetHostEntry(TimeServer);
                IPAddress ip4IP = hostadd.AddressList[0];
                //foreach (IPAddress ipAddress in hostadd.AddressList) {
                //    if (ipAddress.AddressFamily == AddressFamily.InterNetwork) {
                //        ip4IP = ipAddress;
                //        break;
                //    }
                //}
                IPEndPoint EPhost = new IPEndPoint(ip4IP, 123);

                Socket pSocket = new Socket(
                    AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                pSocket.ReceiveTimeout = 2000;
                pSocket.SendTimeout = 2000;
                pSocket.Connect(EPhost);
EN

回答 1

Stack Overflow用户

发布于 2011-02-06 04:09:19

看起来您在套接字()调用中指定了IPv4。你试过使用InterNetworkV6而不是InterNetwork吗?根据我的经验(至少使用C套接字),IPv6套接字将同时支持IPv4和IPv6地址,但IPv4套接字只支持IPv4。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3786130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档