123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // tcp_watchdog.hpp
- // Copyright (C) 2006 - 2009 MicroNeil Research Corporation
- // Watchdog timer for TCP connections.
- // Closes the connection if it times out.
- // Theoretically, when a socet closes, anything blocked on that socket
- // will receive an exception and will deal with that appropriately by
- // stopping what it is doing... Can't work on a closed socket ;-)
- // This allows blocking sockets to be used safely in that the application
- // won't "hang" on a stopped / broken socket.
-
- #ifndef tcp_watchdog_included
- #define tcp_watchdog_included
-
- #include "timing.hpp"
- #include "threading.hpp"
- #include "networking.hpp"
-
- class TCPWatchdog : private Thread {
- private:
-
- Socket& MySocket; // Socket to watch.
- Timeout MyTimeout; // Timeout value.
-
- void myTask(); // Watchdog task.
-
- volatile bool StillAlive; // True if we're watching.
-
- public:
-
- TCPWatchdog(Socket& SocketToWatch, int Milliseconds); // Create with a socket and a time limit.
- ~TCPWatchdog(); // Destroy by stopping the task.
-
- void reset(); // Reset the watchdog - everything is ok.
- void reset(int Milliseconds); // Reset the watchdog - use a new time.
- void stop(); // Stop the watchdog - all done here.
-
- const static ThreadType Type; // The thread's type.
-
- const static ThreadState Watching; // State when waiting to fire.
- const static ThreadState KilledSocket; // Killed The Socket.
- const static ThreadState LiveAndLetBe; // Shutdown without incident.
-
- };
-
- #endif
|