Sha256: 8590e4b9411572a06c5de429fe3ac2468128b6cdbcbd0772e99e4c8fb067123b

Contents?: true

Size: 1.72 KB

Versions: 28

Compression:

Stored size: 1.72 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

28 entries across 28 versions & 6 rubygems

Version Path
net-ssh-7.3.0 lib/net/ssh/connection/keepalive.rb
net-ssh-7.3.0.rc1 lib/net/ssh/connection/keepalive.rb
harbr-2.8.1 vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.1/lib/net/ssh/connection/keepalive.rb
net-ssh-7.2.3 lib/net/ssh/connection/keepalive.rb
net-ssh-backports-6.3.6.backports lib/net/ssh/connection/keepalive.rb
net-ssh-backports-6.3.5.backports lib/net/ssh/connection/keepalive.rb
net-ssh-backports-6.3.4.backports lib/net/ssh/connection/keepalive.rb
net-ssh-backports-6.3.3.backports lib/net/ssh/connection/keepalive.rb
net-ssh-backports-6.3.2.backports lib/net/ssh/connection/keepalive.rb
net-ssh-backports-6.3.1.backports lib/net/ssh/connection/keepalive.rb
net-ssh-backports-6.3.0.backports lib/net/ssh/connection/keepalive.rb
net-ssh-7.2.2.rc1 lib/net/ssh/connection/keepalive.rb
net-ssh-7.2.1 lib/net/ssh/connection/keepalive.rb
net-ssh-7.2.1.rc1 lib/net/ssh/connection/keepalive.rb
honeybadger-5.4.0 vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.0/lib/net/ssh/connection/keepalive.rb
honeybadger-5.3.0 vendor/bundle/ruby/3.2.0/gems/net-ssh-7.2.0/lib/net/ssh/connection/keepalive.rb
net-ssh-7.2.0 lib/net/ssh/connection/keepalive.rb
net-ssh-7.2.0.rc1 lib/net/ssh/connection/keepalive.rb
net-ssh-7.2.0.beta1 lib/net/ssh/connection/keepalive.rb
net-ssh-7.1.0 lib/net/ssh/connection/keepalive.rb