From 8c95c9d5ae6ad9b4920e06669d900f9df4cc2711 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 5 Nov 2025 19:20:13 +0900 Subject: [PATCH 1/2] Dispatch by platform at load `RUBY_PLATFORM` should be invariant within the same process. --- ext/socket/lib/socket.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ext/socket/lib/socket.rb b/ext/socket/lib/socket.rb index 1e30861efaeb3f..f01616bf5aea76 100644 --- a/ext/socket/lib/socket.rb +++ b/ext/socket/lib/socket.rb @@ -1569,13 +1569,16 @@ def self.unix_server_socket(path) end end - class << self - private - - def unix_socket_abstract_name?(path) - /linux/ =~ RUBY_PLATFORM && /\A(\0|\z)/ =~ path + if RUBY_PLATFORM.include?("linux") + def self.unix_socket_abstract_name?(path) + path.empty? or path.start_with?("\0") + end + else + def self.unix_socket_abstract_name?(path) + false end end + private_class_method :unix_socket_abstract_name? # creates a UNIX socket server on _path_. # It calls the block for each socket accepted. From 89056f4a86e51226f72d88e8eb40084910e57819 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 5 Nov 2025 19:25:46 +0900 Subject: [PATCH 2/2] [DOC] Stop documentation for internals Stop documentation for undocumented private constants and private class methods. And align private method definition styles. Also `Socket.tcp_with_fast_fallback` looks private as well as `Socket.tcp_without_fast_fallback`. --- ext/socket/lib/socket.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ext/socket/lib/socket.rb b/ext/socket/lib/socket.rb index f01616bf5aea76..9862c92c0b6591 100644 --- a/ext/socket/lib/socket.rb +++ b/ext/socket/lib/socket.rb @@ -599,6 +599,7 @@ def accept_nonblock(exception: true) __accept_nonblock(exception) end + # :stopdoc: RESOLUTION_DELAY = 0.05 private_constant :RESOLUTION_DELAY @@ -616,6 +617,7 @@ def accept_nonblock(exception: true) IPV6_ADDRESS_FORMAT = /\A(?i:(?:(?:[0-9A-F]{1,4}:){7}(?:[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){6}(?:[0-9A-F]{1,4}|:(?:[0-9A-F]{1,4}:){1,5}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){5}(?:(?::[0-9A-F]{1,4}){1,2}|:(?:[0-9A-F]{1,4}:){1,4}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){4}(?:(?::[0-9A-F]{1,4}){1,3}|:(?:[0-9A-F]{1,4}:){1,3}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){3}(?:(?::[0-9A-F]{1,4}){1,4}|:(?:[0-9A-F]{1,4}:){1,2}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){2}(?:(?::[0-9A-F]{1,4}){1,5}|:(?:[0-9A-F]{1,4}:)[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){1}(?:(?::[0-9A-F]{1,4}){1,6}|:(?:[0-9A-F]{1,4}:){0,5}[0-9A-F]{1,4}|:)|(?:::(?:[0-9A-F]{1,4}:){0,7}[0-9A-F]{1,4}|::)))(?:%.+)?\z/ private_constant :IPV6_ADDRESS_FORMAT + # :startdoc: # :call-seq: # Socket.tcp(host, port, local_host=nil, local_port=nil, [opts]) {|socket| ... } @@ -680,6 +682,7 @@ def self.tcp(host, port, local_host = nil, local_port = nil, connect_timeout: ni end end + # :stopdoc: def self.tcp_with_fast_fallback(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil, open_timeout: nil) if local_host || local_port local_addrinfos = Addrinfo.getaddrinfo(local_host, local_port, nil, :STREAM, timeout: resolv_timeout) @@ -923,6 +926,7 @@ def self.tcp_with_fast_fallback(host, port, local_host = nil, local_port = nil, connecting_socket.close end end + private_class_method :tcp_with_fast_fallback def self.tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:, open_timeout:) last_error = nil @@ -1106,7 +1110,6 @@ def any_unresolved_family? end private_constant :HostnameResolutionStore - # :stopdoc: def self.ip_sockets_port0(ai_list, reuseaddr) sockets = [] begin @@ -1139,9 +1142,7 @@ def self.ip_sockets_port0(ai_list, reuseaddr) end sockets end - class << self - private :ip_sockets_port0 - end + private_class_method :ip_sockets_port0 def self.tcp_server_sockets_port0(host) ai_list = Addrinfo.getaddrinfo(host, 0, nil, :STREAM, nil, Socket::AI_PASSIVE) @@ -1569,6 +1570,7 @@ def self.unix_server_socket(path) end end + # :stopdoc: if RUBY_PLATFORM.include?("linux") def self.unix_socket_abstract_name?(path) path.empty? or path.start_with?("\0") @@ -1579,6 +1581,7 @@ def self.unix_socket_abstract_name?(path) end end private_class_method :unix_socket_abstract_name? + # :startdoc: # creates a UNIX socket server on _path_. # It calls the block for each socket accepted.