acl  3.5.3.0
master_proc.hpp
浏览该文件的文档.
1 #pragma once
2 #include "master_base.hpp"
3 
4 #ifndef ACL_CLIENT_ONLY
5 
6 struct ACL_VSTREAM;
7 struct ACL_EVENT;
8 struct ACL_VSTRING;
9 
10 namespace acl {
11 
12 class socket_stream;
13 
14 /**
15  * acl_master 服务器框架中进程方式的模板类,该类对象只能有一个实例运行
16  */
18 {
19 public:
20  /**
21  * 开始运行,调用该函数是指该服务进程是在 acl_master 服务框架
22  * 控制之下运行,一般用于生产机状态
23  * @param argc {int} 从 main 中传递的第一个参数,表示参数个数
24  * @param argv {char**} 从 main 中传递的第二个参数
25  */
26  void run_daemon(int argc, char** argv);
27 
28  /**
29  * 在单独运行时的处理函数,用户可以调用此函数进行一些必要的调试工作
30  * @param addrs {const char*} 服务监听地址列表,格式:IP:PORT, IP:PORT...
31  * @param path {const char*} 配置文件全路径
32  * @param count {int} 当该值 > 0 时,则接收的连接次数达到此值且完成
33  * 后,该函数将返回,否则一直循环接收远程连接
34  * @return {bool} 监听是否成功
35  */
36  bool run_alone(const char* addrs, const char* path = NULL, int count = 1);
37 
38  /**
39  * 获得配置文件路径
40  * @return {const char*} 返回值为 NULL 表示没有设配置文件
41  */
42  const char* get_conf_path(void) const;
43 
44 protected:
45  master_proc();
46  virtual ~master_proc();
47 
48  /**
49  * 纯虚函数:当接收到一个客户端连接时调用此函数
50  * @param stream {aio_socket_stream*} 新接收到的客户端异步流对象
51  * 注:该函数返回后,流连接将会被关闭,用户不应主动关闭该流
52  */
53  virtual void on_accept(socket_stream* stream) = 0;
54 
55 private:
56  // 当接收到一个客户端连接时回调此函数
57  static void service_main(void*, ACL_VSTREAM *stream);
58 
59  // 当监听一个服务地址时回调此函数
60  static void service_on_listen(void*, ACL_VSTREAM*);
61 
62  // 当进程切换用户身份后调用的回调函数
63  static void service_pre_jail(void*);
64 
65  // 当进程切换用户身份后调用的回调函数
66  static void service_init(void*);
67 
68  // 当进程退出时调用的回调函数
69  static void service_exit(void*);
70 
71  // 当进程收到 SIGHUP 信号后会回调本函数
72  static int service_on_sighup(void*, ACL_VSTRING*);
73 
74 private:
75  // 在单独运行方式下,该函数当监听套接字有新连接到达时被调用
76  static void listen_callback(int event_type, ACL_EVENT*,
77  ACL_VSTREAM*, void* context);
78 
79 private:
80  bool stop_;
81  int count_limit_;
82  int count_;
83 };
84 
85 } // namespace acl
86 
87 #endif // ACL_CLIENT_ONLY
struct ACL_EVENT ACL_EVENT
Definition: acl_events.h:43
#define ACL_CPP_API