@@ -25,40 +25,33 @@ pub(all) type Printer (String) -> Unit
25
25
async fn server (println : Printer ) -> Unit raise {
26
26
@async .with_task_group (fn (group ) {
27
27
let listen_sock = @socket .TCP ::new ()
28
+ defer listen_sock .close ()
28
29
listen_sock ..bind (@socket .Addr ::parse ("0.0.0.0:\{ port } " ))..listen ()
29
30
try {
30
31
for {
31
32
let (conn , _ ) = listen_sock .accept ()
32
33
println ("received new connection" )
33
34
group .spawn_bg (fn () {
35
+ defer conn .close ()
34
36
let buf = FixedArray ::make (1024 , b '0' )
35
- try {
36
- while conn .recv (buf ) is n && n > 0 {
37
- let msg = buf .unsafe_reinterpret_as_bytes ()[0 :n ]
38
- println ("server received: \{ msg } " )
39
- let reply = b "pong"
40
- conn .send (reply )
41
- println ("server sent: \{ reply } " )
42
- if msg == b "exit" {
43
- println ("server initiate terminate" )
44
- raise ServerTerminate
45
- }
46
- } else {
47
- println ("server: connection closed by peer" )
48
- }
49
- conn .close ()
50
- } catch {
51
- err => {
52
- conn .close ()
53
- raise err
37
+ while conn .recv (buf ) is n && n > 0 {
38
+ let msg = buf .unsafe_reinterpret_as_bytes ()[0 :n ]
39
+ println ("server received: \{ msg } " )
40
+ let reply = b "pong"
41
+ conn .send (reply )
42
+ println ("server sent: \{ reply } " )
43
+ if msg == b "exit" {
44
+ println ("server initiate terminate" )
45
+ raise ServerTerminate
54
46
}
47
+ } else {
48
+ println ("server: connection closed by peer" )
55
49
}
56
50
})
57
51
}
58
52
} catch {
59
53
err => {
60
54
println ("server terminate: \{ err } " )
61
- listen_sock .close ()
62
55
raise err
63
56
}
64
57
}
@@ -68,6 +61,7 @@ async fn server(println : Printer) -> Unit raise {
68
61
///|
69
62
async fn client (println : Printer , id : Int , msg : Bytes ) -> Unit raise {
70
63
let conn = @socket .TCP ::new ()
64
+ defer conn .close ()
71
65
conn .connect (@socket .Addr ::parse ("127.0.0.1:\{ port } " ))
72
66
// The sleep here is used to make test result stable and portable,
73
67
// because this message is in race condition
@@ -77,20 +71,11 @@ async fn client(println : Printer, id : Int, msg : Bytes) -> Unit raise {
77
71
conn .send (msg )
78
72
println ("client \{ id } sent: \{ msg } " )
79
73
let buf = FixedArray ::make (1024 , b '0' )
80
- try {
81
- if conn .recv (buf ) is n && n > 0 {
82
- let msg = buf .unsafe_reinterpret_as_bytes ()[0 :n ]
83
- println ("client \{ id } received: \{ msg } " )
84
- } else {
85
- println ("client \{ id } : connection closed by peer" )
86
- }
87
- } catch {
88
- err => {
89
- conn .close ()
90
- raise err
91
- }
92
- } noraise {
93
- _ => conn .close ()
74
+ if conn .recv (buf ) is n && n > 0 {
75
+ let msg = buf .unsafe_reinterpret_as_bytes ()[0 :n ]
76
+ println ("client \{ id } received: \{ msg } " )
77
+ } else {
78
+ println ("client \{ id } : connection closed by peer" )
94
79
}
95
80
}
96
81
0 commit comments