ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-FastPing/FastPing.pm
(Generate patch)

Comparing AnyEvent-FastPing/FastPing.pm (file contents):
Revision 1.4 by root, Mon Jun 2 09:09:31 2008 UTC vs.
Revision 1.8 by root, Wed Apr 7 14:13:16 2010 UTC

27no warnings; 27no warnings;
28 28
29use AnyEvent; 29use AnyEvent;
30 30
31BEGIN { 31BEGIN {
32 our $VERSION = '1.11'; 32 our $VERSION = '1.13';
33 our @ISA = qw(Exporter); 33 our @ISA = qw(Exporter);
34 34
35 require Exporter; 35 require Exporter;
36 #Exporter::export_ok_tags (keys %EXPORT_TAGS); 36 #Exporter::export_ok_tags (keys %EXPORT_TAGS);
37 37
91range C<interval> is the minimum time in seconds between pings to the 91range C<interval> is the minimum time in seconds between pings to the
92given range. If omitted, defaults to C<$send_interval>. 92given range. If omitted, defaults to C<$send_interval>.
93 93
94The C<$send_interval> is the minimum interval between sending any two 94The C<$send_interval> is the minimum interval between sending any two
95packets and is a way to make an overall rate limit. If omitted, pings will 95packets and is a way to make an overall rate limit. If omitted, pings will
96be send as fast as possible. 96be sent as fast as possible.
97 97
98The C<$payload> is a 32 bit unsigned integer given as the ICMP ECHO 98The C<$payload> is a 32 bit unsigned integer given as the ICMP ECHO
99REQUEST ident and sequence numbers (in unspecified order :). 99REQUEST ident and sequence numbers (in unspecified order :).
100 100
101The request will be queued and all requests will be served by a background 101The request will be queued and all requests will be served by a background
156Register a callback that is called for every received ping reply 156Register a callback that is called for every received ping reply
157(regardless of whether a ping is still in process or not and regardless of 157(regardless of whether a ping is still in process or not and regardless of
158whether the reply is actually a reply to a ping sent earlier). 158whether the reply is actually a reply to a ping sent earlier).
159 159
160The code reference gets a single parameter - an arrayref with an 160The code reference gets a single parameter - an arrayref with an
161entry for each received packet (replies are beign batched for greater 161entry for each received packet (replies are being batched for greater
162efficiency). Each packet is represented by an arrayref with three members: 162efficiency). Each packet is represented by an arrayref with three members:
163the source address (an octet string of either 4 (IPv4) or 16 (IPv6) octets 163the source address (an octet string of either 4 (IPv4) or 16 (IPv6) octets
164length), the payload as passed to C<icmp_ping> and the round trip time in 164length), the payload as passed to C<icmp_ping> and the round trip time in
165seconds. 165seconds.
166
167Example: register a callback which simply dumps the received data. Since
168the coderef is created on the fly via sub, it would be hard to unregister
169this callback again :)
170
171 AnyEvent::FastPing::register_cb sub {
172 for (@{$_[0]}) {
173 printf "%s %d %g\n",
174 (4 == length $_->[0] ? inet_ntoa $_->[0] : Socket6::inet_ntop (&AF_INET6, $_->[0])),
175 $_->[2],
176 $_->[1];
177 }
178 };
166 179
167Example: a single ping reply with payload of 1 from C<::1> gets passed 180Example: a single ping reply with payload of 1 from C<::1> gets passed
168like this: 181like this:
169 182
170 [ [ 183 [ [
196 209
197=cut 210=cut
198 211
199our @CB; 212our @CB;
200 213
201sub register_cb(&) { 214sub register_cb($) {
202 push @CB, $_[0]; 215 push @CB, $_[0];
203} 216}
204 217
205sub unregister_cb($) { 218sub unregister_cb($) {
206 @CB = grep $_ != $_[0], @CB; 219 @CB = grep $_ != $_[0], @CB;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines