Sha256: b538aa571770406ae97a83d4739113a09d2b7170b0aec039c72e188b35bc8dd9

Contents?: true

Size: 1.46 KB

Versions: 34

Compression:

Stored size: 1.46 KB

Contents

require 'net/ssh/loggable'
module Net; module SSH; module Connection

class Keepalive
  include Loggable

  def initialize(session)
    @last_keepalive_sent_at = nil
    @unresponded_keepalive_count = 0
    @session = session
    self.logger = session.logger
  end

  def options
    @session.options
  end

  def enabled?
    options[:keepalive]
  end

  def interval
    options[:keepalive_interval] || Session::DEFAULT_IO_SELECT_TIMEOUT
  end

  def should_send?
    return false unless enabled?
    return true unless @last_keepalive_sent_at
    Time.now - @last_keepalive_sent_at >= interval
  end

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

  def send_as_needed(was_events)
    return if was_events
    return unless should_send?
    info { "sending keepalive #{@unresponded_keepalive_count}" }

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

end; end; end

Version data entries

34 entries across 31 versions & 3 rubygems

Version Path
vagrant-unbundled-2.2.7.0 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.1.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.1.2.0 vendor/bundle/ruby/2.3.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.3.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.5.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.1.1.0 vendor/bundle/ruby/2.5.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.0.4.0 vendor/bundle/ruby/2.5.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.0.3.0 vendor/bundle/ruby/2.5.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
net-ssh-5.0.0.beta1 lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.0.2.0 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.1.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.0.2.0 vendor/bundle/ruby/2.5.0/gems/net-ssh-4.2.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.0.1.0 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.1.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-2.0.0.1 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.1.0/lib/net/ssh/connection/keepalive.rb
net-ssh-4.2.0 lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-1.9.8.1 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.1.0/lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-1.9.7.1 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.1.0/lib/net/ssh/connection/keepalive.rb
net-ssh-4.2.0.rc2 lib/net/ssh/connection/keepalive.rb
net-ssh-4.2.0.rc1 lib/net/ssh/connection/keepalive.rb
vagrant-unbundled-1.9.5.1 vendor/bundle/ruby/2.4.0/gems/net-ssh-4.1.0/lib/net/ssh/connection/keepalive.rb
net-ssh-4.1.0 lib/net/ssh/connection/keepalive.rb