新手问题 这段三行的 Ruby 的 Socket 代码求解释?

ibachue · 2013年11月14日 · 最后由 sevk 回复于 2013年11月14日 · 2456 次阅读

Hi all,

今天读到这样一段代码,由于 UNIX 功底不太好,不知道为何作者在这里先把域名和端口包装起来,随后就拆包?这么做是有什么好处嘛?谢谢

def canonicalize_tcp(addr, port)
  packed = Socket.pack_sockaddr_in(port, addr)
  port, addr = Socket.unpack_sockaddr_in(packed)
  /:/ =~ addr ? "[#{addr}]:#{port}" : "#{addr}:#{port}"
end

应该是要把一些不规则的写法变成可读的规则的真实地址吧

我错了,不是可读。。。。只是真实

[8] pry(main)> addr = Socket.sockaddr_in(90,'localhost')
=> "\x1C\x1E\x00Z\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00"
[9] pry(main)> Socket.unpack_sockaddr_in(addr)
=> [90, "::1"]
[10] pry(main)> addr = Socket.sockaddr_in(90,'www.sina.com.cn')
=> "\x10\x02\x00Z\xB7<\xBB-\x00\x00\x00\x00\x00\x00\x00\x00"
[11] pry(main)> Socket.unpack_sockaddr_in(addr)
=> [90, "183.60.187.45"]

#2 楼 @ZombieCoder 啊 谢谢 了解了 原来还具有 DNS 功能啊

学习了。

我在陈浩的博客看到一个叫 bachue 的人是你么。。。

#5 楼 @rasefon 额 是啊 一样的头像嘛

就解个域名啊?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号