i'm walking through .../perl5/site_perl/5.10.0/POE/Component/Client/Ping.pm
where do we emit an error if we are unable to send an ICMP packet?
seems to me that we decide to send the ping in the very last line of 'sub
poco_ping_ping':
[...]
# Request a ping. This code borrows heavily from Net::Ping.
sub poco_ping_ping {
[...]
_send_packet($kernel, $heap);
}
and we actually send the ping on line 362, within the '_send_packet' routine,
specifically, from the 'send' phrase within the 'unless' clause:
sub _send_packet {
my ($kernel, $heap) = @_;
return unless (scalar @{$heap->{queue}});
[...]
# Send the packet. If send() fails, then we bail with an error.
my @user_args = ();
($event, @user_args) = @$event if ref($event) eq "ARRAY";
DEBUG and warn "sending packet sequence number $seq\n";
unless (send($heap->{socket_handle}, $msg, ICMP_FLAGS, $socket_address)) {
$kernel->post(
$sender, $event,
[ $address, # REQ_ADDRESS
$timeout, # REQ_TIMEOUT
time(), # REQ_TIME
@user_args, # REQ_USER_ARGS
],
[ undef, # RES_ADDRESS
undef, # RES_ROUNDTRIP
time(), # RES_TIME
undef, # RES_TTL
],
);
_check_for_close($kernel, $heap);
return;
}
[...]
now, i see the comment "If send() fails, then we bail with an error". but i
don't see where we actually spit out an error message. seems to me that
_send_packet returns with a value of 0 (that 'return' statement just after the
call to _check_for_close) ... but i don't see us checking the return value of
_send_packet, back in "sub poco_ping_ping"
or ... does the "$kernel-post( ..." event trigger an error message, through some
mechanism i don't understand?
would it be reasonable for me to add the following, in order to track the
success/failure of the call to send() ?
[...]
unless (send($heap->{socket_handle}, $msg, ICMP_FLAGS, $socket_address)) {
warn "Unable to send() ICMP packet";
$kernel->post(
[...]
or would i be duplicating effort performed elsewhere?
actually, what i really want to do is to log such events to syslog, so am i
headed in a fruitful direction by adding the following?
[...]
unless (send($heap->{socket_handle}, $msg, ICMP_FLAGS, $socket_address)) {
use Sys::Syslog;
openlog('PoCo-Ping', 'nofatal,ndelay,pid', 'local0');
syslog('error', 'Unable to send() ICMP packet');
closelog();
$kernel->post(
[...]
--sk