For our main system, we have a small monitor application that sits outside our network and periodically tries to log in to verify the system still works. We have a problem with the monitor though in that the communications component set (Asta 3 inside Delphi applications) doesn't always connect through. Overall, I'd say it's about 95% reliable, but that other 5% kills the monitor since it will try to log in and hang on the connection attempt (no timeout in the component). This really isn't an issue on the client side of the system since the clients don't disconnect and reconnect repeatedly on the same application instance, but I need a way to make sure the monitor stays up and continues working even when the component fails on a run. I have a few ideas as to which way to have the program run, the main idea being to put the communications inside a threaded data module so that if one thread crashes then another thread can test later and the program keep going. Does this sound like a valid way to go? Any other ideas how to ensure a reliable monitoring application with a less than 100% reliable component?
Is there a reason you dont switch to an networking component that supports a timeout? That would seem to be the common sense solution here.
Can you use Indy or Synapse or a simple TSocket connection?
Since you cant realistically switch, you can:
Create a command line program that does the check, and use CreateProcess from a parent app to start it and stop it if it hangs.
Pester the people who make ASTA to put in a timeout setting. It seems awfully wierd for there not to be one there already.