Skip to content

Commit 0a12803

Browse files
committed
modify the last PR
1 parent 702f1ec commit 0a12803

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

server/server.go

+19-20
Original file line numberDiff line numberDiff line change
@@ -179,21 +179,30 @@ func HandleClient(client *client, userConnChan chan net.Conn) {
179179
go client.Read(ctx)
180180
go client.Write(ctx)
181181

182+
user := &user{
183+
read: make(chan []byte),
184+
write: make(chan []byte),
185+
exit: make(chan error),
186+
}
187+
188+
defer func() {
189+
_ = client.conn.Close()
190+
_ = user.conn.Close()
191+
client.reConn <- true
192+
}()
193+
182194
for {
183195
select {
184196
case userConn := <-userConnChan:
185-
user := &user{
186-
conn: userConn,
187-
read: make(chan []byte),
188-
write: make(chan []byte),
189-
exit: make(chan error),
190-
}
191-
197+
user.conn = userConn
192198
go handle(ctx, client, user)
193199
case err := <-client.exit:
194200
fmt.Println("client出现错误, 关闭连接", err.Error())
195201
cancel()
196-
client.reConn <- true
202+
return
203+
case err := <-user.exit:
204+
fmt.Println("user出现错误,关闭连接", err.Error())
205+
cancel()
197206
return
198207
}
199208
}
@@ -203,9 +212,8 @@ func HandleClient(client *client, userConnChan chan net.Conn) {
203212
// 1. 将从user收到的信息发给client
204213
// 2. 将从client收到信息发给user
205214
func handle(ctx context.Context, client *client, user *user) {
206-
userCtx, cancel := context.WithCancel(ctx)
207-
go user.Read(userCtx)
208-
go user.Write(userCtx)
215+
go user.Read(ctx)
216+
go user.Write(ctx)
209217

210218
for {
211219
select {
@@ -217,15 +225,6 @@ func handle(ctx context.Context, client *client, user *user) {
217225
user.write <- clientRecv
218226

219227
case <-ctx.Done():
220-
_ = client.conn.Close()
221-
_ = user.conn.Close()
222-
cancel() // client关闭,关闭user读写协程
223-
return
224-
225-
case err := <-user.exit:
226-
fmt.Println("user出现错误,关闭连接", err.Error())
227-
_ = user.conn.Close()
228-
cancel() // user错误,关闭user读写协程
229228
return
230229
}
231230
}

0 commit comments

Comments
 (0)