forked from kerasking/KendyNet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tcpserver.c
56 lines (48 loc) · 1.26 KB
/
tcpserver.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
#include "kendynet.h"
#include "stream_conn.h"
#include "kn_timer.h"
int client_count = 0;
int packet_count = 0;
int on_packet(stream_conn_t c,packet_t p){
//printf("on_packet\n");
//stream_conn_send(c,p);
//stream_conn_close(c);
rpacket_t rpk = (rpacket_t)p;
const char *str = rpk_read_string(rpk);
if(strcmp(str,"hello") != 0)
{
printf("error\n");
exit(0);
}
++packet_count;
stream_conn_send(c,(packet_t)wpk_copy_create(p));
return 1;
}
void on_disconnected(stream_conn_t c,int err){
printf("on_disconnectd\n");
--client_count;
}
void on_accept(handle_t s,void *ud){
printf("on_accept\n");
engine_t p = (engine_t)ud;
stream_conn_t conn = new_stream_conn(s,4096,RPACKET);
stream_conn_associate(p,conn,on_packet,on_disconnected);
++client_count;
printf("%d\n",client_count);
}
int timer_callback(kn_timer_t timer){
printf("client_count:%d,packet_count:%d\n",client_count,packet_count);
packet_count = 0;
return 1;
}
int main(int argc,char **argv){
signal(SIGPIPE,SIG_IGN);
engine_t p = kn_new_engine();
kn_sockaddr local;
kn_addr_init_in(&local,argv[1],atoi(argv[2]));
handle_t l = kn_new_sock(AF_INET,SOCK_STREAM,IPPROTO_TCP);
kn_sock_listen(p,l,&local,on_accept,p);
kn_reg_timer(p,1000,timer_callback,NULL);
kn_engine_run(p);
return 0;
}