diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:36:34 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:36:34 +0000 |
commit | 441546edcfbb1b346c87b69c5f578d1a0e522e06 (patch) | |
tree | 04f606a008baebc445f38944ad37e87468da29ea /ruby_1_8_6/lib/ping.rb | |
parent | fa93611c0f9a6db146341c792bfe3b7322ec00e2 (diff) |
add tag v1_8_6_269
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_6_269@17937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_6/lib/ping.rb')
-rw-r--r-- | ruby_1_8_6/lib/ping.rb | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/ruby_1_8_6/lib/ping.rb b/ruby_1_8_6/lib/ping.rb new file mode 100644 index 0000000000..c2966b619c --- /dev/null +++ b/ruby_1_8_6/lib/ping.rb @@ -0,0 +1,64 @@ +# +# = ping.rb: Check a host for upness +# +# Author:: Yukihiro Matsumoto +# Documentation:: Konrad Meyer +# +# Performs the function of the basic network testing tool, ping. +# See: Ping. +# + +require 'timeout' +require "socket" + +# +# Ping contains routines to test for the reachability of remote hosts. +# Currently the only routine implemented is pingecho(). +# +# Ping.pingecho uses a TCP echo (not an ICMP echo) to determine if the +# remote host is reachable. This is usually adequate to tell that a remote +# host is available to telnet, ftp, or ssh to. +# +# Warning: Ping.pingecho may block for a long time if DNS resolution is +# slow. Requiring 'resolv-replace' allows non-blocking name resolution. +# +# Usage: +# +# require 'ping' +# +# puts "'jimmy' is alive and kicking" if Ping.pingecho('jimmy', 10) +# +module Ping + + # + # Return true if we can open a connection to the hostname or IP address + # +host+ on port +service+ (which defaults to the "echo" port) waiting up + # to +timeout+ seconds. + # + # Example: + # + # require 'ping' + # + # Ping.pingecho "google.com", 10, 80 + # + def pingecho(host, timeout=5, service="echo") + begin + timeout(timeout) do + s = TCPSocket.new(host, service) + s.close + end + rescue Errno::ECONNREFUSED + return true + rescue Timeout::Error, StandardError + return false + end + return true + end + module_function :pingecho +end + +if $0 == __FILE__ + host = ARGV[0] + host ||= "localhost" + printf("%s alive? - %s\n", host, Ping::pingecho(host, 5)) +end |