# # Net-Oping - lib/Net/Oping.pm # Copyright (C) 2007 Olivier Fredj # Copyright (C) 2008,2009 Florian octo Forster # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; only version 2 of the License is # applicable. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # Authors: # Olivier Fredj # Florian octo Forster # package Net::Oping; =head1 NAME Net::Oping - ICMP latency measurement module using the oping library. =head1 SYNOPSIS use Net::Oping (); my $obj = Net::Oping->new (); $obj->host_add (qw(one.example.org two.example.org)); my $ret = $obj->ping (); print "Latency to `one' is " . $ret->{'one.example.org'} . "\n"; =head1 DESCRIPTION This Perl module is a high-level interface to the L. Its purpose it to send C packets (also known as "ping") to a host and measure the time that elapses until the reception of an C packet (also known as "pong"). If no such packet is received after a certain timeout the host is considered to be unreachable. The used I library supports "ping"ing multiple hosts in parallel and works with IPv4 and IPv6 transparently. Other advanced features that are provided by the underlying library, such as setting the data sent, are not yet supported by this interface. =cut use 5.006; use strict; use warnings; use Carp (qw(cluck confess)); our $VERSION = '1.21'; require XSLoader; XSLoader::load ('Net::Oping', $VERSION); return (1); =head1 INTERFACE The interface is kept simple and clean. First you need to create an object to which you then add hosts. Using the C method you can request a latency measurement and get the current values returned. If necessary you can remove hosts from the object, too. The constructor and methods are defined as follows: =over 4 =item I<$obj> = Net::Oping-EB (); Creates and returns a new object. =cut sub new { my $pkg = shift; my $ping_obj = _ping_construct (); my $obj = bless ({ c_obj => $ping_obj }, $pkg); return ($obj); } sub DESTROY { my $obj = shift; _ping_destroy ($obj->{'c_obj'}); } =item I<$status> = I<$obj>-EB (I<$timeout>); Sets the timeout before a host is considered unreachable to I<$timeout> seconds, which may be a floating point number to specify fractional seconds. =cut sub timeout { my $obj = shift; my $timeout = shift; my $status; $status = _ping_setopt_timeout ($obj->{'c_obj'}, $timeout); if ($status != 0) { $obj->{'err_msg'} = "" . _ping_get_error ($obj->{'c_obj'}); return; } return (1); } =item I<$status> = I<$obj>-EB (I<$ttl>); Sets the I