-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtcpserver.dc
58 lines (50 loc) · 1.25 KB
/
tcpserver.dc
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
var connbuf 1024 mkbuf connbuf !
var received 1024 mkbuf received !
var response_prefix "OK, message received: " response_prefix !
var response_prefix_len
response_prefix @ strlen response_prefix_len !
# create a listening server
var srv_queue 5509 tcplisten srv_queue !
var accepted_conn
: get_accepted_conn accepted_conn @ ;
: get_connbuf connbuf @ ;
: get_received received @ ;
: get_response_prefix response_prefix @ ;
: get_response_prefix_len response_prefix_len @ ;
: zerobuf get_connbuf 0 1024 memset ;
: copyinput
get_received
get_connbuf
dup strlen
mempcpy
drop
;
: read_request
zerobuf
get_accepted_conn get_connbuf 1023 read drop
;
: concat_response
copyinput
zerobuf
get_connbuf get_response_prefix get_response_prefix_len mempcpy
get_received dup strlen mempcpy
;
: write_response
get_accepted_conn get_connbuf dup strlen write drop
get_accepted_conn close drop
;
: acceptloop
# wait for a request
"waiting for a request..." print cr
srv_queue @ tcpaccept accepted_conn !
# read the incoming msg
read_request
# echo the incoming on the server side
"Here is the incoming message: " print get_connbuf print cr
concat_response
write_response
acceptloop
;
acceptloop
# close down connection
srv_queue @ close drop