123456789_123456789_123456789_123456789_123456789_

Class: Socket::SelectableAddrinfos

Relationships & Source Files
Inherits: Object
Defined in: ext/socket/lib/socket.rb

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.newSelectableAddrinfos

[ GitHub ]

  
# 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