Sha256: 535c329dbe99e743ca701a08817d16098852ae1371e57ce184e87c124e81109a

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

module Net; module SSH; module Connection

module Keepalive
  # Default IO.select timeout threshold
  DEFAULT_IO_SELECT_TIMEOUT = 300

  def initialize_keepalive
    @last_keepalive_sent_at = nil
    @unresponded_keepalive_count = 0
  end

  def keepalive_enabled?
    options[:keepalive]
  end

  def keepalive_interval
    options[:keepalive_interval] || DEFAULT_IO_SELECT_TIMEOUT
  end

  def should_send_keepalive?
    return false unless keepalive_enabled?
    return true unless @last_keepalive_sent_at
    Time.now - @last_keepalive_sent_at >= keepalive_interval
  end

  def keepalive_maxcount
    (options[:keepalive_maxcount] || 3).to_i
  end

  def send_keepalive_as_needed(readers, writers)
    return unless readers.nil? && writers.nil?
    return unless should_send_keepalive?
    info { "sending keepalive #{@unresponded_keepalive_count}" }

    @unresponded_keepalive_count += 1
    send_global_request("keepalive@openssh.com") { |success, response|
      puts "before zero => #{@unresponded_keepalive_count}"
      @unresponded_keepalive_count = 0
    }
    @last_keepalive_sent_at = Time.now
    if keepalive_maxcount > 0 && @unresponded_keepalive_count > keepalive_maxcount
      error { "Timeout, server #{host} not responding. Missed #{@unresponded_keepalive_count-1} timeouts." }
      raise Net::SSH::Timeout, "Timeout, server #{host} not responding."
    end
  end
end

end; end; end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
net-ssh-2.9.2.beta lib/net/ssh/connection/keepalive.rb