Acaba de salir un código parecido en perlmonks que hace algo parecido, sólo que es un monitor permanente de la conexión:
- Código: Seleccionar todo
#!/usr/bin/perl
use strict;
use POSIX qw(setsid);
use Net::Ping;
{ fork and exit; setsid }
my $router = q{default gw ip};
my $net = Net::Ping->new;
sleep 5, $net->ping($router, 1) or `inet` while 1
En principio, he entrado aquí:
http://perlmonks.org/?sourceid=Mozilla- ... ton=SearchHay muchas preguntas e informaciones que te pueden interesar. He visto incluso que hay mucho código.
Pero la solución, como siempre, viene de leer el manual. De Net::Telnet::Cisco, me dice que este módulo está basado en Net::Telnet. Allí veo que hay un párrafo que pone:
Errors such as timing-out are handled according to the error mode action. The default action is to print an error message to standard error and have the program die. See the errmode() method for more information.
que en español quiere decir, más o menos, que
Errores como timeout se manejan de acuerdo a la acción modo error. La acción por defecto es pintar el mensaje de error y que muera el programa. Ver el método errmode() para más información.
Y eso es lo que te pasa: se produce un timeout, sale el mensaje y se muere el programa.
Lo que hay que hacer luego es averiguar cómo funciona la función errmode(), y según el manual, se le puede decir que haga varias cosas:
- que muera el programa (que es lo que hace por defecto).
- que haga un simple return (devuelve el mensaje a la función donde ocurrió el error y continúa.
- Ejecutar tu propio código
He modificado tu código, pero no lo he probado. Ya me dirás...
He hecho tres cambios: ajustar el valor de errmode dos veces, la primera de ellas con una subrutina que pinte el mensaje de error y nada más. Y luego, en el momento del login, le he añadido un modificador next para que, en caso de que falle el login, lo intenté con el siguiente router.
También he cambiado la lógica del programa, pues tenías puesto que se conectara una vez para saber el nombre del router, desconectarte, y volver a conectarte, con la difeerencia de indicar el registro de actividad (log). Ahora sólo se conecta una vez.
Si tienes algún problema con la subrutina del primer errmode, cámbiala a 'return'.
Ya me dirás.