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>