Issue #13593 has been updated by akr (Akira Tanaka). Status changed from Open to Feedback It is difficult compare Addrinfo objects precisely if not impossible. Using Addrinfo#inspect as addrinfo_eql.diff is fragile. Addrinfo is basically struct addrinfo which contains struct sockaddr. Byte-to-byte comparison may not work. struct sockaddr can have padding which makes byte-to-byte comparison different but means same address. Also, ai_family may be AF_UNSPEC which is same meaning to AF_INET or AF_INET6. I guess there are more concerns. The critical point is that Ruby can not know all protocols supported by OS. Since struct sockaddr depends to a protocol, we can not compare all socket address properly. ---------------------------------------- Bug #13593: Addrinfo#== behaves oddly https://bugs.ruby-lang.org/issues/13593#change-65793 * Author: ioquatix (Samuel Williams) * Status: Feedback * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- It appears as if Addrinfo is using object identity. `Addrinfo#==` doesn't appear to work as one might expect, given the same instantiation: ~~~ > irb 2.4.0 :001 > require 'socket' => true 2.4.0 :002 > Addrinfo.tcp('0.0.0.0', 1234) == Addrinfo.tcp('0.0.0.0', 1234) => false 2.4.0 :003 > a = Addrinfo.tcp('0.0.0.0', 1234) => #<Addrinfo: 0.0.0.0:1234 TCP> 2.4.0 :004 > a == a => true 2.4.0 :005 > ~~~ ---Files-------------------------------- addrinfo_eql.diff (575 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>