ruby - 为什么 Ruby 的 IPAddr#family 方法在 IPv4 地址上调用时返回 2,而在 IPv6 上调用时返回 10?

标签 ruby

使用标准库中的 IPAddr:

IPAddr.new('192.168.0.1').family
=> 2

IPAddr.new('1a03:a240:0100:0000:0000:0000:0000:0000').family
=> 10

所以我猜测 2 代表 IPv4,而 10 代表 IPv6。为什么是 2 和 10?为什么不是 4 和 6?

使用 2 和 10 是没有意义的,因为它暗示 IPv4 是二进制的,而 IPv6 是以 10 为底的,而实际上它们都是二进制的(在幕后),并且是 IPv4 的人类可读形式以 10 为底,而对于 IPv6,它是十六进制...

是否有一些我不知道的更深层次的逻辑?

最佳答案

这些数字是在 Socket 模块中定义的常量。 IPv4 地址族是 Socket::AF_INET,IPv6 是 Socket::AF_INET6

令我吃惊的是,在我的 Ruby (2.0) 上,AF_INET6 的编号与您的不同:

[9] pry(main)> IPAddr.new('1a03:a240:0100:0000:0000:0000:0000:0000').family
=> 30
[10] pry(main)> Socket::AF_INET6
=> 30
[11] pry(main)> Socket::AF_INET
=> 2

所以最好不要使用数字本身,而是使用常量名称。

关于ruby - 为什么 Ruby 的 IPAddr#family 方法在 IPv4 地址上调用时返回 2,而在 IPv6 上调用时返回 10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996972/

相关文章:

ruby-on-rails - RVM gemset 创建不工作

ruby - 在 ruby​​ 中更改 block 内的上下文/绑定(bind)

ruby - 如何在 ruby​​ 中实现 argmax?

ruby-on-rails - 使 RoR 嵌套可表示为数组

ruby-on-rails - Options_for_select 不工作 : dropdown box for boolean

ruby - rbenv:没有这样的命令 `shell' - 在 16.04 sudo 环境中为每个应用程序/目录配置 RBENV

c++ - 尝试将两个视频与 pHash 库及其 ruby​​ 绑定(bind)进行比较时出现段错误

ruby-on-rails - 从 Ruby on Rails 应用程序将数据传递到 Flex 图表的最佳方法是什么?

iphone - 设计和 Rails 3 中的 http 身份验证

ruby-on-rails - ruby 中的 activemerchant paypal 配置