From 8a7198508a08d42ffcd95084022f1fc00d9ff7c4 Mon Sep 17 00:00:00 2001 From: sukun Date: Mon, 8 Jul 2024 16:04:16 +0530 Subject: [PATCH] websocket: don't return transport.ErrListenerClosed on closing listener --- p2p/transport/websocket/listener.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/p2p/transport/websocket/listener.go b/p2p/transport/websocket/listener.go index d7a1b885b8..3ff72830d1 100644 --- a/p2p/transport/websocket/listener.go +++ b/p2p/transport/websocket/listener.go @@ -2,10 +2,11 @@ package websocket import ( "crypto/tls" + "errors" "fmt" "net" "net/http" - "strings" + "sync" "github.com/libp2p/go-libp2p/core/transport" @@ -22,8 +23,11 @@ type listener struct { laddr ma.Multiaddr - closed chan struct{} incoming chan *Conn + + closeOnce sync.Once + closeErr error + closed chan struct{} } func (pwma *parsedWebsocketMultiaddr) toMultiaddr() ma.Multiaddr { @@ -122,7 +126,6 @@ func (l *listener) Accept() (manet.Conn, error) { c.Close() return nil, err } - return mnc, nil case <-l.closed: return nil, transport.ErrListenerClosed @@ -134,13 +137,13 @@ func (l *listener) Addr() net.Addr { } func (l *listener) Close() error { - l.server.Close() - err := l.nl.Close() - <-l.closed - if strings.Contains(err.Error(), "use of closed network connection") { - return transport.ErrListenerClosed - } - return err + l.closeOnce.Do(func() { + err1 := l.nl.Close() + err2 := l.server.Close() + <-l.closed + l.closeErr = errors.Join(err1, err2) + }) + return l.closeErr } func (l *listener) Multiaddr() ma.Multiaddr {