-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathev.c
52 lines (42 loc) · 1.01 KB
/
ev.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* local */
#include "logging.h"
#include "helpers.h"
#include "ev.h"
#include "ev_epoll.h"
/* system */
#include <unistd.h>
int
ev_server_start(struct evs *evs) {
/* Create and listen tcp socket */
evs->listenfd = tcp_listen(&(evs->bind));
if (evs->listenfd == ERR) {
ERROR("Cannot bind on: %d", evs->bind);
return ERR;
}
/* Initialize event loop. */
if (ev_epoll_server_init(evs)) {
return ERR;
}
/* Fork and start multiple instance of server. */
if (ev_common_fork(evs, (ev_cb_t) ev_epoll_server_loop)) {
/* loop error */
ev_epoll_server_deinit(evs);
return ERR;
}
/* loop ok */
return OK;
}
int
ev_server_terminate(struct evs *evs) {
int ret = ev_common_terminate((struct ev *) evs);
ev_epoll_server_deinit(evs);
close(evs->listenfd);
return ret;
}
int
ev_server_join(struct evs *evs) {
int ret = ev_common_join((struct ev *) evs);
ev_epoll_server_deinit(evs);
close(evs->listenfd);
return ret;
}