123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Settings::TCPSocketProbe

Relationships & Source Files
Inherits: Object
Defined in: lib/bundler/mirror.rb

Overview

Class used for probing TCP availability for a given mirror.

Instance Method Summary

Instance Method Details

#probe_writtable_socket(socket, address) (private)

[ GitHub ]

  
# File 'lib/bundler/mirror.rb', line 171

def probe_writtable_socket(socket, address)
  socket.connect_nonblock(address)
rescue Errno::EISCONN
  true
rescue StandardError # Connection failed
  false
end

#replies?(mirror) ⇒ Boolean

[ GitHub ]

  
# File 'lib/bundler/mirror.rb', line 149

def replies?(mirror)
  MirrorSockets.new(mirror).any? do |socket, address, timeout|
    begin
      socket.connect_nonblock(address)
    rescue Errno::EINPROGRESS
      wait_for_writtable_socket(socket, address, timeout)
    rescue RuntimeError # Connection failed somehow, again
      false
    end
  end
end

#wait_for_writtable_socket(socket, address, timeout) (private)

[ GitHub ]

  
# File 'lib/bundler/mirror.rb', line 163

def wait_for_writtable_socket(socket, address, timeout)
  if IO.select(nil, [socket], nil, timeout)
    probe_writtable_socket(socket, address)
  else # TCP Handshake timed out, or there is something dropping packets
    false
  end
end