ICMP is not a reliable network protocol. IP is allowed to drop the packets without notice. The only way to detect the case is when too much time has elapsed without a response---$timeout is reached.

Enqueuing your request in the event queue is not the same thing as sending an ICMP packet. post() may succeed where the ping fails.

--
Rocco Caputo - rcap...@pobox.com


On Apr 19, 2009, at 12:44, Stuart Kendrick wrote:

If the OS fails to execute a ping, does there exist a mechanism for the OS to tell POE about that? And for me to 'notice' such an incident?

I was hoping that checking the return value on a 'post' would do that ... but thus far, no dice (i.e. the box on which my script is running intermittently fails to emit pings, but by script doesn't log anything.)

[...]
   # "Pinger, do a ping and return the results as a pong event.  The
   # address to ping is $addr."
   $result = $kernel->post(  'pinger',
                             'ping',
                             'pong',
                             $addr,
                             $timeout,
                           );
   log_error("Problem pinging $addr: $!") unless $result;
[...]

From http://search.cpan.org/~rcaputo/POE-1.004/lib/POE/Kernel.pm#post_DESTINATION,_EVENT_NAME_ [,_PARAMETER_LIST]

"post() returns a Boolean value indicating whether the message was successfully enqueued. If post() returns false, $! is set to explain the failure:"

--sk


Stuart Kendrick wrote:
my favorite pinging application (in-house app, uses POE::Component::Client::Ping) intermittently reports a rash of missed replies. happens roughly the same time each night; the condition lasts for several minutes

Reply via email to