This repository has been archived on 2021-09-15. You can view files and clone it, but cannot push or open issues or pull requests.
DUT2Curling/lib/net/ping.rb

90 lines
2.9 KiB
Ruby

require 'socket'
require 'timeout'
# The Net module serves as a namespace only.
#
module Net
# The Ping class serves as an abstract base class for all other Ping class
# types. You should not instantiate this class directly.
#
class Ping
# The version of the net-ping library.
VERSION = '1.7.1'
# The host to ping. In the case of Ping::HTTP, this is the URI.
attr_accessor :host
# The port to ping. This is set to the echo port (7) by default. The
# Ping::HTTP class defaults to port 80.
#
attr_accessor :port
# The maximum time a ping attempt is made.
attr_accessor :timeout
# If a ping fails, this value is set to the error that occurred which
# caused it to fail.
#
attr_reader :exception
# This value is set if a ping succeeds, but some other condition arose
# during the ping attempt which merits warning, e.g a redirect in the
# case of Ping::HTTP#ping.
#
attr_reader :warning
# The number of seconds (returned as a Float) that it took to ping
# the host. This is not a precise value, but rather a good estimate
# since there is a small amount of internal calculation that is added
# to the overall time.
#
attr_reader :duration
# The default constructor for the Net::Ping class. Accepts an optional
# +host+, +port+ and +timeout+. The port defaults to your echo port, or
# 7 if that happens to be undefined. The default timeout is 5 seconds.
#
# The host, although optional in the constructor, must be specified at
# some point before the Net::Ping#ping method is called, or else an
# ArgumentError will be raised.
#
# Yields +self+ in block context.
#
# This class is not meant to be instantiated directly. It is strictly
# meant as an interface for subclasses.
#
def initialize(host=nil, port=nil, timeout=5)
@host = host
@port = port || Socket.getservbyname('echo') || 7
@timeout = timeout
@exception = nil
@warning = nil
@duration = nil
yield self if block_given?
end
# The default interface for the Net::Ping#ping method. Each subclass
# should call super() before continuing with their own implementation in
# order to ensure that the @exception and @warning instance variables
# are reset.
#
# If +host+ is nil here, then it will use the host specified in the
# constructor. If the +host+ is nil and there was no host specified
# in the constructor then an ArgumentError is raised.
#--
# The @duration should be set in the subclass' ping method.
#
def ping(host = @host)
raise ArgumentError, 'no host specified' unless host
@exception = nil
@warning = nil
@duration = nil
end
alias ping? ping
alias pingecho ping
end
end