/usr/lib/ruby/vendor_ruby/net/ssh/connection/keepalive.rb is in ruby-net-ssh 1:3.0.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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(readers, writers)
return unless readers.nil? && writers.nil?
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
|