-
Notifications
You must be signed in to change notification settings - Fork 0
/
mrpc.c
65 lines (53 loc) · 1.64 KB
/
mrpc.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
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "proxy.h"
#include "mrpc.h"
extern pxy_worker_t *worker;
extern upstream_map_t *upstream_root;
extern pxy_settings setting;
static mrpc_upstreamer_t mrpc_up;
//static char* PROTOCOL = "MCP/3.0";
int mrpc_start()
{
int fd = mrpc_up.listen_fd;
if (listen(fd, 1024) < 0) {
E("rpc listen error");
return -1;
}
int r = ev_add_file_item(worker->ev, fd, EV_READABLE,
NULL, mrpc_svr_accept, NULL);
if (r < 0) {
E("create ev for listen fd error");
goto start_failed;
}
return 0;
start_failed:
return -1;
}
int mrpc_init()
{
D("mrpc init begins");
mrpc_args_init();
mrpc_init_stash_conns();
struct sockaddr_in addr1;
mrpc_up.listen_fd = -1;
INIT_LIST_HEAD(&mrpc_up.conn_list);
mrpc_up.listen_fd = socket(AF_INET, SOCK_STREAM, 0);
if (mrpc_up.listen_fd < 0) {
E("create rpc listen fd error");
return -1;
}
int reuse = 1;
setsockopt(mrpc_up.listen_fd , SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int));
if (setnonblocking(mrpc_up.listen_fd) < 0) {
E("set nonblocling error");
return -1;
}
addr1.sin_family = AF_INET;
addr1.sin_port = htons(setting.backend_port);
addr1.sin_addr.s_addr = 0;
if (bind(mrpc_up.listen_fd, (struct sockaddr*)&addr1, sizeof(addr1)) < 0) {
E("bind error");
return -1;
}
D("mrpc init finish, port %d", setting.backend_port);
return 0;
}