Skip to content

Commit 7abfa3b

Browse files
committed
Close accepted listener connections
Once the client closes the connection or an error occures.
1 parent 86d61ee commit 7abfa3b

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

server.go

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package turn
33

44
import (
5+
"errors"
56
"fmt"
67
"net"
78
"sync"
@@ -70,7 +71,13 @@ func NewServer(config ServerConfig) (*Server, error) {
7071
return nil, fmt.Errorf("failed to create AllocationManager: %w", err)
7172
}
7273

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)
7481
}
7582

7683
for _, cfg := range s.listenerConfigs {
@@ -79,7 +86,13 @@ func NewServer(config ServerConfig) (*Server, error) {
7986
return nil, fmt.Errorf("failed to create AllocationManager: %w", err)
8087
}
8188

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)
8396
}
8497

8598
return s, nil
@@ -122,29 +135,21 @@ func (s *Server) Close() error {
122135
return err
123136
}
124137

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) {
140139
for {
141-
conn, err := l.Listener.Accept()
140+
conn, err := l.Accept()
142141
if err != nil {
143142
s.log.Debugf("Failed to accept: %s", err)
144143
return
145144
}
146145

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+
}()
148153
}
149154
}
150155

0 commit comments

Comments
 (0)