From: Bruce W. <br...@mi...> - 2002-05-29 12:43:53
|
> I'm new to Perl, and I'm having a problem with Socket_Item. More like a > question, I guess, since I don't know enough yet to have a problem... :) > > I would like to write a monitor to restart a process that dies on my Linux > box. The process allows for a local incoming telnet connection, > and if you > send it any data, it returns a '.' on a line by itself. I figure > that if I > create a socket item, and send a '\n' to the server, and don't > receive a '.' > back, I know to reboot the process. > > I'm having a tough time figuring out what to do after creating the > Socket_Item. Does Socket_Item time out if it doesn't receive a > reply? How > can I tell if it's timed out? Should I use send_expect, or some > other way? A normal 'set $socket_object' simply sends data and 'said $socket_object' will return any data collected up to a break character. So you can send data out, send a timer, then reboot the dead iasvr process if the timer expires without receiving any data back. You could use 'set_expect $socket_object', which does the above with a built in timer, except it currently does not have a user-programable time-out hook. Something like this should get you started: --- $ia_timer = new Timer; $ia_server = new Socket_Item(undef, undef, 'localhost:9034', 'iasvr', 'tcp', 'record'); if ($New_Minute) { set $ia_server 'You alive?'; set $ia_timer 10; } unset $ia_timer if said $ia_server; if (expired $ia_timer) { ... kill and restart ia server ... } --- Bruce |