Skip to content

Commit 7d9a4cc

Browse files
committed
fix(tun): blocked on ctx.Done()
close: #1399
1 parent 88890dd commit 7d9a4cc

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

app/internal/tun/server.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,7 @@ func (t *tunHandler) NewConnection(ctx context.Context, conn net.Conn, m metadat
123123
defer rc.Close()
124124

125125
// start forwarding
126-
copyErrChan := make(chan error, 3)
127-
go func() {
128-
<-ctx.Done()
129-
copyErrChan <- ctx.Err()
130-
}()
126+
copyErrChan := make(chan error, 2)
131127
go func() {
132128
_, copyErr := io.Copy(rc, conn)
133129
copyErrChan <- copyErr
@@ -136,7 +132,11 @@ func (t *tunHandler) NewConnection(ctx context.Context, conn net.Conn, m metadat
136132
_, copyErr := io.Copy(conn, rc)
137133
copyErrChan <- copyErr
138134
}()
139-
closeErr = <-copyErrChan
135+
select {
136+
case <-ctx.Done():
137+
closeErr = ctx.Err()
138+
case closeErr = <-copyErrChan:
139+
}
140140
return nil
141141
}
142142

@@ -160,11 +160,7 @@ func (t *tunHandler) NewPacketConnection(ctx context.Context, conn network.Packe
160160
defer rc.Close()
161161

162162
// start forwarding
163-
copyErrChan := make(chan error, 3)
164-
go func() {
165-
<-ctx.Done()
166-
copyErrChan <- ctx.Err()
167-
}()
163+
copyErrChan := make(chan error, 2)
168164
// local <- remote
169165
go func() {
170166
for {
@@ -205,7 +201,11 @@ func (t *tunHandler) NewPacketConnection(ctx context.Context, conn network.Packe
205201
}
206202
}
207203
}()
208-
closeErr = <-copyErrChan
204+
select {
205+
case <-ctx.Done():
206+
closeErr = ctx.Err()
207+
case closeErr = <-copyErrChan:
208+
}
209209
return nil
210210
}
211211

0 commit comments

Comments
 (0)