[ruby/resolv] Use port number 0 for ephemeral port if save

On platforms where ephemeral port randomization is implemented, the
same randomization is not needed in the ruby library layer.

Fixes https://github.com/ruby/resolv/pull/63.

https://github.com/ruby/resolv/commit/45e1b563c0
This commit is contained in:
Nobuyoshi Nakada 2025-01-21 16:44:46 +09:00 committed by git
parent e5f81e511f
commit d3bd8df2b8

View File

@ -659,8 +659,20 @@ class Resolv
} }
end end
case RUBY_PLATFORM
when *[
# https://www.rfc-editor.org/rfc/rfc6056.txt
# Appendix A. Survey of the Algorithms in Use by Some Popular Implementations
/freebsd/, /linux/, /netbsd/, /openbsd/, /solaris/,
/darwin/, # the same as FreeBSD
] then
def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc: def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
begin udpsock.bind(bind_host, 0)
end
else
# Sequential port assignment
def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
# Ephemeral port number range recommended by RFC 6056
port = random(1024..65535) port = random(1024..65535)
udpsock.bind(bind_host, port) udpsock.bind(bind_host, port)
rescue Errno::EADDRINUSE, # POSIX rescue Errno::EADDRINUSE, # POSIX