预先创建套接字而不知道它们是IPv4还是IPv6 您所在的位置:网站首页 github支持ipv6吗 预先创建套接字而不知道它们是IPv4还是IPv6

预先创建套接字而不知道它们是IPv4还是IPv6

2023-03-18 11:17| 来源: 网络整理| 查看: 265

我有一些代码通过预先创建套接字(通过.socket()BSD API)工作,然后在地址已知的时候它将执行connect()等.这适用于IPv4但现在我正在重构也支持IPv6.

问题是,当我执行初始socket()时,我需要放入AF_INET或AF_INET6.但是因为我不知道地址但我不知道哪个是正确的.反正有没有创建一个适用于任何一个的通用套接字?如果我使用AF_INET6并且我在IPv4网络上,我是否正确认为它不起作用?

一个相关的问题 - 即使我还不知道IP地址,我是否有可能检测到我的设备所处的网络:IPv4还是IPv6?假设有一个网络接口,我想我只能是其中一个网络,所以如果我能找到一种方法来检测我的设备所处的网络类型,那么我可以在创建套接字时这样做.

另一个选择是重构只有在我知道地址时才创建套接字,但是有一个很大的代码库,如果可能的话我想避免这种情况.

我正在编写在iOS上运行的代码,但我不确定这是否与此相关.

1> SergeyA..:

你想做什么是不可能的.创建套接字时,它与堆栈协议相关联,而IPV6和IPV4只是不同的堆栈协议.

但是,真正的问题是为什么要预先创建套接字?为什么不在需要时创建套接字?

最后,但并非最不重要,你的假设是不正确的.您的设备可以有多个接口 - 一个用于IPv4,另一个用于IPv6 - 并同时使用它们.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有