123456789_123456789_123456789_123456789_123456789_

Class: Socket::HostnameResolutionQueue

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

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(size) ⇒ HostnameResolutionQueue

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1049

def initialize(size)
  @size = size
  @taken_count = 0
  @rpipe, @wpipe = IO.pipe
  @queue = Queue.new
  @mutex = Mutex.new
end

Instance Attribute Details

#closed?Boolean (readonly)

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1090

def closed?
  @rpipe.closed?
end

#opened?Boolean (readonly)

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1094

def opened?
  !closed?
end

Instance Method Details

#add_error(family, error)

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1068

def add_error(family, error)
  @mutex.synchronize do
    @queue.push [family, error]
    @wpipe.putc HOSTNAME_RESOLUTION_QUEUE_UPDATED
  end
end

#add_resolved(family, resolved_addrinfos)

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1061

def add_resolved(family, resolved_addrinfos)
  @mutex.synchronize do
    @queue.push [family, resolved_addrinfos]
    @wpipe.putc HOSTNAME_RESOLUTION_QUEUE_UPDATED
  end
end

#close_all

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1098

def close_all
  @queue.close unless @queue.closed?
  @rpipe.close unless @rpipe.closed?
  @wpipe.close unless @wpipe.closed?
end

#get

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1075

def get
  return nil if @queue.empty?

  res = nil

  @mutex.synchronize do
    @rpipe.getbyte
    res = @queue.pop
  end

  @taken_count += 1
  close_all if @taken_count == @size
  res
end

#waiting_pipe

[ GitHub ]

  
# File 'ext/socket/lib/socket.rb', line 1057

def waiting_pipe
  [@rpipe]
end