00001 #ifndef _broker_Daemon_h
00002 #define _broker_Daemon_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <string>
00023 #include <boost/scoped_ptr.hpp>
00024 #include <boost/function.hpp>
00025 #include <boost/noncopyable.hpp>
00026
00027 namespace qpid {
00028 namespace broker {
00029
00034 class Daemon : private boost::noncopyable
00035 {
00036 public:
00038 static pid_t getPid(uint16_t port);
00039
00040 Daemon();
00041
00042 virtual ~Daemon();
00043
00048 void fork();
00049
00050 protected:
00051
00053 virtual void parent() = 0;
00054
00056 virtual void child() = 0;
00057
00062 uint16_t wait(int timeout);
00063
00068 void ready(uint16_t port);
00069
00070 private:
00071 static std::string dir();
00072 static std::string pidFile(uint16_t port);
00073
00074 pid_t pid;
00075 int pipeFds[2];
00076 std::string lockFile;
00077 };
00078
00079 }}
00080
00081 #endif