Pārlūkot izejas kodu

Guarantee of closing sockets after context is done

tags/0.12
9seconds 7 gadus atpakaļ
vecāks
revīzija
1ee34fd502
1 mainītis faili ar 7 papildinājumiem un 0 dzēšanām
  1. 7
    0
      proxy/proxy.go

+ 7
- 0
proxy/proxy.go Parādīt failu

47
 	ctx, cancel := context.WithCancel(context.Background())
47
 	ctx, cancel := context.WithCancel(context.Background())
48
 
48
 
49
 	defer func() {
49
 	defer func() {
50
+		cancel()
50
 		conn.Close() // nolint: errcheck
51
 		conn.Close() // nolint: errcheck
51
 
52
 
52
 		if err := recover(); err != nil {
53
 		if err := recover(); err != nil {
74
 	}
75
 	}
75
 	defer serverConn.(io.Closer).Close() // nolint: errcheck
76
 	defer serverConn.(io.Closer).Close() // nolint: errcheck
76
 
77
 
78
+	go func() {
79
+		<-ctx.Done()
80
+		serverConn.(io.Closer).Close()
81
+		clientConn.(io.Closer).Close()
82
+	}()
83
+
77
 	wait := &sync.WaitGroup{}
84
 	wait := &sync.WaitGroup{}
78
 	wait.Add(2)
85
 	wait.Add(2)
79
 
86
 

Notiek ielāde…
Atcelt
Saglabāt