From: "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" Date: 2023-12-09T01:46:49+00:00 Subject: [ruby-core:115670] [Ruby master Bug#20048] UDPSocket#remote_address spec errors Issue #20048 has been updated by kjtsanaktsidis (KJ Tsanaktsidis). OK, I think the solution is to _partially_ revert that commit. The problem is that for `TCPsocket` connects we do `getaddrinfo(3)` with `AF_UNSPEC` and then `socket(2)` with the family of one of the returned addresses. BUT, the `UDPSocket` constructor takes an explicit family option (and defaults to `AF_INET` if unset), and then when `UDPSocket#connect` is called, we call `getaddrinfo(3)` _with that address family_. Thus, UDP sockets fall into the case I outlined in my previous message, but TCP sockets don't. If we ever wrote a `UDPSocket::new(remote_host, remote_port, local_host=nil, local_port=nil)` constructor like we have for `TCPSocket`, _that_ constructor could do the getaddrinfo-then-socket flow and could use AI_ADDRCONFIG. But the current constructor sets the family on the socket explicitly, so AI_ADDRCONFIG doesn't make a lot of sense. AI_ADDRCONFIG says "return addresses only of types that I could conceivably use to make a connection", but if you've already committed to what address family to use because you made the socket, you know exactly what address family you're looking for. So let's merge https://github.com/ruby/ruby/pull/9177 I think. ---------------------------------------- Bug #20048: UDPSocket#remote_address spec errors https://bugs.ruby-lang.org/issues/20048#change-105605 * Author: vo.x (Vit Ondruch) * Status: Open * Priority: Normal * ruby -v: ruby 3.3.0dev (2023-12-07 master 071df40495) [x86_64-linux] * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- Testing of Fedora Rawhide, we have recently started to observe following errors: ~~~ $ make -C redhat-linux-build test-spec MSPECOPT="-fs ../spec/ruby/library/socket/udpsocket" ... snip ... 1) An exception occurred during: before :each UDPSocket#local_address using IPv4 using an implicit hostname the returned Addrinfo uses the correct IP address ERROR Socket::ResolutionError: getaddrinfo: Name or service not known /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/local_address_spec.rb:66:in `connect' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/local_address_spec.rb:66:in `block (4 levels) in ' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/local_address_spec.rb:4:in `' 2) An exception occurred during: before :each UDPSocket#local_address using IPv6 using an implicit hostname the returned Addrinfo uses the correct IP address ERROR Socket::ResolutionError: getaddrinfo: Name or service not known /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/local_address_spec.rb:66:in `connect' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/local_address_spec.rb:66:in `block (4 levels) in ' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/local_address_spec.rb:4:in `' 3) An exception occurred during: before :each UDPSocket#remote_address using IPv4 using an implicit hostname the returned Addrinfo uses the correct IP address ERROR Socket::ResolutionError: getaddrinfo: Name or service not known /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/remote_address_spec.rb:65:in `connect' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/remote_address_spec.rb:65:in `block (4 levels) in ' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/remote_address_spec.rb:4:in `' 4) An exception occurred during: before :each UDPSocket#remote_address using IPv6 using an implicit hostname the returned Addrinfo uses the correct IP address ERROR Socket::ResolutionError: getaddrinfo: Name or service not known /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/remote_address_spec.rb:65:in `connect' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/remote_address_spec.rb:65:in `block (4 levels) in ' /builddir/build/BUILD/ruby-3.3.0-071df40495/spec/ruby/library/socket/udpsocket/remote_address_spec.rb:4:in `' Finished in 0.020615 seconds 11 files, 95 examples, 123 expectations, 0 failures, 4 errors, 0 tagged make: *** [uncommon.mk:983: yes-test-spec] Error 1 make: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-071df40495/redhat-linux-build' ~~~ Please note that the build environment does not have network connection enabled by default. As soon as the network connection is available, the test cases pass just fine. This started to happen between these two commits: https://github.com/ruby/ruby/compare/c8b60c8ac2c8bbd077150792b5b207e983ab3634...071df40495e31f6d3fd14ae8686b01edf9a689e3 Where the culprit likely is commit:git|d2ba8ea54a4089959afdeecdd963e3c4ff391748 Originally reported [here](https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LEQADI6FCX74KSWJZKSJRBAJIS7EMUQS/) -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/