我可以使用Windows SDK的IN6_IS_ADDR_LOOPBACK等吗? al.,尽管没有文档?

问题描述 投票:0回答:1

在 Linux 上,netinet/in.h“应定义以下宏来测试特殊 IPv6 地址。”这包括

IN6_IS_ADDR_UNSPECIFIED
IN6_IS_ADDR_LOOPBACK
IN6_IS_ADDR_LINKLOCAL
IN6_IS_ADDR_SITELOCAL
IN6_IS_ADDR_V4MAPPED
IN6_IS_ADDR_V4COMPAT
IN6_IS_ADDR_MULTICAST
等宏。都非常有用。

我广泛搜索了 Windows(包括但不限于 Winsock 和 Winsock 2)文档中的类似内容,但没有找到任何类似内容。

但是后来,我偶然发现 Windows SDK 的

ws2ipdef.h
定义了一组具有相同名称和行为的函数不是宏)(示例)。我可以在从最新到 Windows 7 的众多 Windows SDK 版本中找到它(我无法找到较旧的 Windows SDK 版本进行检查),但只能通过直接检查头文件来找到。作为仔细检查,我专门查看了
ws2ipdef.h
的文档,它或其任何子页面都没有提到任何这些功能。

此外,在谷歌上搜索这些带引号的函数名称加上“Windows”绝对不会产生任何有用或权威的结果。

所以,这让我想到两个问题:

  1. 尽管缺乏文档,使用这些函数是否安全?如果它们是宏,我会谨慎地将它们定义在
    #ifndef
    块内,但它们是实际函数,所以我不能这样做。我必须按原样使用它们,或者用不同的名称重新实现它们,以防止过载错误。
  2. 为什么不将它们记录下来?它们显然很有帮助,并且旨在镜像同名的 Linux 宏。
c windows winapi ipv6 loopback
1个回答
1
投票

由于(有帮助的)评论者 Luke 和 Ron 选择发表评论而不是答案,我会将他们的评论和我自己的经验总结为答案。

我一直无法找到不包含这些镜像

netinet/in.h
宏的函数的 Windows 版本,并且它们似乎可以正常工作。 Luke 是对的,微软的文档严重缺乏,我不得不严重依赖 StackOverflow 和其他网站和博客来弄清楚如何正确使用
GetAdaptersAddresses
以及相关的函数和类型。正如卢克所说,它们是公共的内联函数,而且看起来是公平的游戏。 Ron 也说得对,其中一些宏/函数适用于已弃用的地址范围,因此应谨慎使用。在我的具体情况下,我实际上使用这些来过滤掉这些已弃用范围中的地址,使它们特别适合我。

我想说,不幸的是,微软选择将它们实现为函数而不是宏,这使得测试它们的存在(并对它们的不存在做出反应)变得不切实际,甚至不可能。

© www.soinside.com 2019 - 2024. All rights reserved.