Class: Socket::SelectableAddrinfos
Relationships & Source Files | |
Inherits: | Object |
Defined in: | ext/socket/lib/socket.rb |
Constant Summary
-
PRIORITY_ON_V4 =
# File 'ext/socket/lib/socket.rb', line 975[:ipv4, :ipv6]
-
PRIORITY_ON_V6 =
# File 'ext/socket/lib/socket.rb', line 974[:ipv6, :ipv4]
Class Method Summary
- .new ⇒ SelectableAddrinfos constructor
Instance Attribute Summary
- #any? ⇒ Boolean readonly
- #empty? ⇒ Boolean readonly
Instance Method Summary
Constructor Details
.new ⇒ SelectableAddrinfos
# File 'ext/socket/lib/socket.rb', line 977
def initialize @addrinfo_dict = {} @last_family = nil end
Instance Attribute Details
#any? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'ext/socket/lib/socket.rb', line 1011
def any? !empty? end
#empty? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'ext/socket/lib/socket.rb', line 1007
def empty? @addrinfo_dict.all? { |_, addrinfos| addrinfos.empty? } end
Instance Method Details
#add(family_name, addrinfos)
[ GitHub ]# File 'ext/socket/lib/socket.rb', line 982
def add(family_name, addrinfos) @addrinfo_dict[family_name] = addrinfos end
#get
[ GitHub ]# File 'ext/socket/lib/socket.rb', line 986
def get return nil if empty? if @addrinfo_dict.size == 1 @addrinfo_dict.each { |_, addrinfos| return addrinfos.shift } end precedences = case @last_family when :ipv4, nil then PRIORITY_ON_V6 when :ipv6 then PRIORITY_ON_V4 end precedences.each do |family_name| addrinfo = @addrinfo_dict[family_name]&.shift next unless addrinfo @last_family = family_name return addrinfo end end