[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:
parent
e5f81e511f
commit
d3bd8df2b8
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user