acl
3.5.3.0
aio_handle.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#include "../stdlib/string.hpp"
4
#include "../stdlib/noncopyable.hpp"
5
6
struct
ACL_AIO
;
7
struct
ACL_EVENT
;
8
9
namespace
acl
10
{
11
12
// 事件引擎类型
13
typedef
enum
14
{
15
ENGINE_SELECT
,
// select 模式(支持所有平台)
16
ENGINE_POLL
,
// poll 模式(仅 UNIX 平台)
17
ENGINE_KERNEL
,
// kernel 模式(win32: iocp, Linux: epoll, FreeBsd: kqueue, Solaris: devpoll
18
ENGINE_WINMSG
// win32 GUI 消息模式
19
}
aio_handle_type
;
20
21
/**
22
* 非阻塞IO的事件引擎类,该类封装了系统的 select/poll/epoll/kqueue/devpoll/iocp,
23
*/
24
25
class
aio_timer_callback;
26
class
aio_delay_free;
27
class
aio_timer_delay_free;
28
29
class
ACL_CPP_API
aio_handle
:
private
noncopyable
30
{
31
public
:
32
/**
33
* 构造函数,会自动创建IO事件引擎,并且在析构函数中会自动释放
34
* @param engine_type {aio_handle_type} 所采用的引擎类型
35
* ENGINE_SELECT: select 方式,支持 win32/unix 平台
36
* ENGINE_POLL: poll 方式,支持 unix 平台
37
* ENGINE_KERNEL: 自动根据各个系统平台所支持的高效内核引擎进行设置
38
* ENGINE_WINMSG: win32 界面消息方式,支持 win32 平台
39
* @param nMsg {unsigned int} 若 engine_type 为 ENGINE_WINMSG,当该值
40
* 大于 0 时,该异步句柄便与该消息绑定,否则与缺省消息绑定;
41
* 当 engine_type 为非 ENGINE_WINMSG 时,该值对其它异步句柄不起作用
42
*
43
*/
44
aio_handle
(
aio_handle_type
engine_type =
ENGINE_SELECT
,
45
unsigned
int
nMsg = 0);
46
47
/**
48
* 构造函数,调用者将 ACL_AIO 句柄传进,而在类的析构函数中并不会
49
* 自动释放该 ACL_AIO 句柄
50
* @param handle {ACL_AIO*} ACL_AIO 句柄
51
*/
52
aio_handle
(
ACL_AIO
* handle);
53
54
virtual
~
aio_handle
(
void
);
55
56
/**
57
* 针对异步读流,设置是否是连续读,该配置项将会被所有的基于
58
* 该异步引擎句柄的异步读流所继承,一般 aio_handle 类对象在缺省
59
* 情况下是连续读的
60
* @param onoff {bool} 设置是否是连续读
61
*/
62
void
keep_read(
bool
onoff);
63
64
/**
65
* 获得异步引擎句柄是否设置了持续读数据的功能
66
* @return {bool}
67
*/
68
bool
keep_read(
void
)
const
;
69
70
/**
71
* 设置定时器
72
* @param callback {aio_timer_callback*} 定时器回调函数类对象
73
* @param delay {int64} 定时器时间间隔(微秒)
74
* @param id {unsigned int} 定时器某个任务的 ID 号
75
* @return {int64} 定时器生效时间(从1970.1.1以来的微秒数)
76
*/
77
#if defined(_WIN32) || defined(_WIN64)
78
__int64 set_timer(
aio_timer_callback
* callback,
79
__int64 delay,
unsigned
int
id
= 0);
80
#else
81
long
long
int
set_timer(
aio_timer_callback
* callback,
82
long
long
int
delay,
unsigned
int
id
= 0);
83
#endif
84
85
/**
86
* 删除定时器的所有定时任务事件
87
* @param callback {aio_timer_callback*} 定时器回调函数类对象
88
* @return {time_t} 定时器生效时间(从1970.1.1以来的微秒数)
89
*/
90
#if defined(_WIN32) || defined(_WIN64)
91
__int64 del_timer(
aio_timer_callback
* callback);
92
#else
93
long
long
int
del_timer(
aio_timer_callback
* callback);
94
#endif
95
96
/**
97
* 删除定时器中某个指定 ID 号的定时任务
98
* @param callback {aio_timer_callback*} 定时器回调函数类对象
99
* @param id {unsigned int} 定时器某个任务的 ID 号
100
* @return {time_t} 定时器生效时间(从1970.1.1以来的微秒数)
101
*/
102
#if defined(_WIN32) || defined(_WIN64)
103
__int64 del_timer(
aio_timer_callback
* callback,
unsigned
int
id
);
104
#else
105
long
long
del_timer(
aio_timer_callback
* callback,
unsigned
int
id
);
106
#endif
107
108
/**
109
* 当定时器处于锁定状态时,用户因为无法释放该定时器而造成内存泄露,
110
* 通过此函数,可以将处于锁定状态的定时器当处于未锁定状态时被事件
111
* 引擎延期释放(调用 aio_delay_free::destroy()),从而可以避免
112
* 内存泄露问题
113
* @param callback {aio_delay_free*}
114
*/
115
void
delay_free(
aio_delay_free
* callback);
116
117
/**
118
* 获得 ACL_AIO 句柄
119
* @return {ACL_AIO*}
120
*/
121
ACL_AIO
* get_handle(
void
)
const
;
122
123
/**
124
* 获得异步引擎的类型
125
* @return {aio_handle_type}
126
*/
127
aio_handle_type
get_engine_type(
void
)
const
;
128
129
/**
130
* 获得当前处于监控的异步流的数量
131
* @return {int}
132
*/
133
int
length(
void
)
const
;
134
135
/**
136
* 检查所有异步流的状态,并触发准备的异步流的处理过程
137
* @return {bool} 是否应中止异步引擎
138
*/
139
bool
check(
void
);
140
141
/**
142
* 获得本次事件循环被触发的事件次数
143
* @return {int}
144
*/
145
int
last_nready(
void
)
const
;
146
147
/**
148
* 通知异步流引擎中止
149
*/
150
void
stop(
void
);
151
152
/**
153
* 重置异步引擎的内部状态
154
*/
155
void
reset(
void
);
156
157
/**
158
* 设置 DNS 服务器地址列表,格式:ip1:port1;ip2:port2...
159
* @param addrs {const char*} DNS 服务器地址列表,如:8.8.8.8:53;1.1.1.1:53
160
* @param timeout {int} DNS 查询超时时间(秒)
161
* 注:set_dns 和 dns_add 执行相同的功能
162
*/
163
void
set_dns(
const
char
* addrs,
int
timeout);
164
void
dns_add(
const
char
* addrs,
int
timeout);
165
166
/**
167
* 删除指定的 DNS 服务器地址列表,格式:ip1:port1;ip2:port2...
168
* @param addrs {const char*} DNS 服务器地址列表
169
*/
170
void
dns_del(
const
char
* addrs);
171
172
/**
173
* 清除掉所设置的所有 DNS 服务器列表
174
*/
175
void
dns_clear(
void
);
176
177
/**
178
* DNS 服务器列表数量
179
* @return {size_t}
180
*/
181
size_t
dns_size(
void
)
const
;
182
183
/**
184
* 判断 DNS 服务器列表是否为空
185
* @return {bool}
186
*/
187
bool
dns_empty(
void
)
const
;
188
189
/**
190
* 获得 DNS 服务器地址列表
191
* @param out {std::vector<std::pair<acl::string, unsigned short> >&}
192
*/
193
void
dns_list(std::vector<std::pair<string, unsigned short> >& out);
194
195
public
:
196
/**
197
* 设置异步引擎循环的等待时间中的秒级部分
198
* @param n {int} 设置用 select/poll/epoll/kqueue/devpoll
199
* 时的秒级等待时间
200
*/
201
void
set_delay_sec(
int
n);
202
203
/**
204
* 设置异步引擎循环的等待时间中的微秒级部分
205
* @param n {int} 设置用 select/poll/epoll/kqueue/devpoll
206
* 时的微秒级等待时间
207
*/
208
void
set_delay_usec(
int
n);
209
210
/**
211
* 设置事件循环过程中定时检查所有描述字状态的时间间隔,
212
* 内部缺省值 100 ms
213
*/
214
void
set_check_inter(
int
n);
215
216
/**
217
* 设置异步流的读缓存区大小
218
* @param n {int} 读缓冲区大小
219
*/
220
void
set_rbuf_size(
int
n);
221
222
protected
:
223
friend
class
aio_stream
;
224
225
/**
226
* 异步流个数加 1
227
*/
228
void
increase(
void
);
229
230
/**
231
* 当异步流个数加 1 时的回调虚函数
232
*/
233
virtual
void
on_increase
(
void
) {}
234
235
/**
236
* 异步流个数减 1
237
*/
238
void
decrease(
void
);
239
240
/**
241
* 当异步流个数减 1 时的回调虚函数
242
*/
243
virtual
void
on_decrease
(
void
) {}
244
245
private
:
246
ACL_AIO
* aio_;
247
bool
inner_alloc_;
248
bool
stop_;
249
int
nstream_;
250
aio_handle_type
engine_type_;
251
aio_timer_delay_free* delay_free_timer_;
252
253
void
destroy_timer(
aio_timer_callback
* callback);
254
static
void
on_timer_callback(
int
event_type,
ACL_EVENT
*,
255
aio_timer_callback
*callback);
256
};
257
258
}
// namespace acl
acl::aio_handle::on_decrease
virtual void on_decrease(void)
Definition:
aio_handle.hpp:243
acl::ENGINE_SELECT
Definition:
aio_handle.hpp:15
acl
Definition:
acl_cpp_init.hpp:4
acl::noncopyable
Definition:
noncopyable.hpp:6
acl::aio_timer_callback
Definition:
aio_timer_callback.hpp:15
acl::ENGINE_WINMSG
Definition:
aio_handle.hpp:18
acl::aio_handle::on_increase
virtual void on_increase(void)
Definition:
aio_handle.hpp:233
acl::aio_delay_free
Definition:
aio_delay_free.hpp:12
ACL_AIO
struct ACL_AIO ACL_AIO
Definition:
acl_aio.h:31
acl::aio_handle_type
aio_handle_type
Definition:
aio_handle.hpp:13
acl::aio_handle
Definition:
aio_handle.hpp:29
ACL_EVENT
struct ACL_EVENT ACL_EVENT
Definition:
acl_events.h:43
acl::ENGINE_KERNEL
Definition:
aio_handle.hpp:17
acl::aio_stream
Definition:
aio_stream.hpp:89
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
acl::ENGINE_POLL
Definition:
aio_handle.hpp:16
include
acl_cpp
stream
aio_handle.hpp
生成于 2021年 九月 10日 星期五 11:14:45 , 为 acl使用
1.8.15