2
2
package turn
3
3
4
4
import (
5
+ "errors"
5
6
"fmt"
6
7
"net"
7
8
"sync"
@@ -70,7 +71,13 @@ func NewServer(config ServerConfig) (*Server, error) {
70
71
return nil , fmt .Errorf ("failed to create AllocationManager: %w" , err )
71
72
}
72
73
73
- go s .readPacketConn (cfg , am )
74
+ go func (cfg PacketConnConfig , am * allocation.Manager ) {
75
+ s .readLoop (cfg .PacketConn , am )
76
+
77
+ if err := am .Close (); err != nil {
78
+ s .log .Errorf ("Failed to close AllocationManager: %s" , err )
79
+ }
80
+ }(cfg , am )
74
81
}
75
82
76
83
for _ , cfg := range s .listenerConfigs {
@@ -79,7 +86,13 @@ func NewServer(config ServerConfig) (*Server, error) {
79
86
return nil , fmt .Errorf ("failed to create AllocationManager: %w" , err )
80
87
}
81
88
82
- go s .readListener (cfg , am )
89
+ go func (cfg ListenerConfig , am * allocation.Manager ) {
90
+ s .readListener (cfg .Listener , am )
91
+
92
+ if err := am .Close (); err != nil {
93
+ s .log .Errorf ("Failed to close AllocationManager: %s" , err )
94
+ }
95
+ }(cfg , am )
83
96
}
84
97
85
98
return s , nil
@@ -122,29 +135,21 @@ func (s *Server) Close() error {
122
135
return err
123
136
}
124
137
125
- func (s * Server ) readPacketConn (p PacketConnConfig , am * allocation.Manager ) {
126
- s .readLoop (p .PacketConn , am )
127
-
128
- if err := am .Close (); err != nil {
129
- s .log .Errorf ("Failed to close AllocationManager: %s" , err )
130
- }
131
- }
132
-
133
- func (s * Server ) readListener (l ListenerConfig , am * allocation.Manager ) {
134
- defer func () {
135
- if err := am .Close (); err != nil {
136
- s .log .Errorf ("Failed to close AllocationManager: %s" , err )
137
- }
138
- }()
139
-
138
+ func (s * Server ) readListener (l net.Listener , am * allocation.Manager ) {
140
139
for {
141
- conn , err := l .Listener . Accept ()
140
+ conn , err := l .Accept ()
142
141
if err != nil {
143
142
s .log .Debugf ("Failed to accept: %s" , err )
144
143
return
145
144
}
146
145
147
- go s .readLoop (NewSTUNConn (conn ), am )
146
+ go func () {
147
+ s .readLoop (NewSTUNConn (conn ), am )
148
+
149
+ if err := conn .Close (); err != nil && ! errors .Is (err , net .ErrClosed ) {
150
+ s .log .Errorf ("failed to close conn: %s" , err )
151
+ }
152
+ }()
148
153
}
149
154
}
150
155
0 commit comments