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(std::string pidDir, uint16_t port);
00039
00040 Daemon(std::string pidDir);
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 pidFile(std::string pidDir, uint16_t port);
00072
00073 pid_t pid;
00074 int pipeFds[2];
00075 int lockFileFd;
00076 std::string lockFile;
00077 std::string pidDir;
00078 };
00079
00080 }}
00081
00082 #endif