Module: Msf::Exploit::Retry
- Defined in:
- lib/msf/core/exploit/retry.rb
Instance Method Summary collapse
-
#retry_until_truthy(timeout:) ⇒ Object
Retry the block until it returns a truthy value.
Instance Method Details
#retry_until_truthy(timeout:) ⇒ Object
Retry the block until it returns a truthy value. Each iteration attempt will be performed with an exponential backoff. If the timeout period surpasses, nil is returned.
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 |
# File 'lib/msf/core/exploit/retry.rb', line 8 def retry_until_truthy(timeout:) start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :second) ending_time = start_time + timeout retry_count = 0 while Process.clock_gettime(Process::CLOCK_MONOTONIC, :second) < ending_time result = yield return result if result retry_count += 1 remaining_time_budget = ending_time - Process.clock_gettime(Process::CLOCK_MONOTONIC, :second) break if remaining_time_budget <= 0 delay = 2**retry_count if delay >= remaining_time_budget delay = remaining_time_budget vprint_status("Final attempt. Sleeping for the remaining #{delay} seconds out of total timeout #{timeout}") else vprint_status("Sleeping for #{delay} seconds before attempting again") end sleep delay end nil end |