【发布时间】:2010-09-17 14:42:17
【问题描述】:
我有一个程序,其中一个外部组件向我传递了一个包含 IP 地址的字符串。然后我需要把它变成一个URI。对于 IPv4,这很容易;我在前面加上 http:// 并附加 /。但是,对于 IPv6,我还需要将其括在括号 [] 中。
是否有标准的套接字 API 调用来确定地址的地址族?
【问题讨论】:
-
我知道它不是套接字 API 的一部分,但如果 IP4 和 IP6 是唯一的可能性,你不能用
strlen来做这件事吗? ;-) -
@Steve Jessop 考虑例如ff02::2 和 8.8.8.8
-
@nos:很公平,没有意识到前者是一个有效的地址。更一般地说,是否有某种方法可以检查字符串,这是比使用套接字 API 更简单的代码?在这种情况下,不需要包含解析地址的结构。
-
如果您知道该字符串是 ipv4 或 ipv6 地址,则查找 .或 : 可能就足够了。根据您需要的验证级别,解析 ipv4 地址相当简单,而 ipv6 地址则更糟。
-
考虑到这一点;决定如果我们想支持 IPv4 和 IPv6 以外的东西,它会太hacky并且可能不会扩展(不太可能,但根据我的经验,我会通过编写不支持它的代码来大大增加它的可能性)。
标签: c sockets network-programming