From fc5749328d88db171b4915d122f96aaf2d1bda48 Mon Sep 17 00:00:00 2001 From: Devin Carr Date: Wed, 24 Aug 2022 15:25:19 -0700 Subject: [PATCH] TUN-6691: Properly error check for net.ErrClosed UDP session would check if the socket was closed before returning but the net.ErrClosed could be wrapped in another error. --- datagramsession/session.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/datagramsession/session.go b/datagramsession/session.go index c28c27fb..94562673 100644 --- a/datagramsession/session.go +++ b/datagramsession/session.go @@ -2,6 +2,7 @@ package datagramsession import ( "context" + "errors" "fmt" "io" "net" @@ -49,10 +50,10 @@ func (s *Session) Serve(ctx context.Context, closeAfterIdle time.Duration) (clos readBuffer := make([]byte, maxPacketSize) for { if closeSession, err := s.dstToTransport(readBuffer); err != nil { - if err != net.ErrClosed { - s.log.Error().Err(err).Msg("Failed to send session payload from destination to transport") + if errors.Is(err, net.ErrClosed) { + s.log.Debug().Msg("Destination connection closed") } else { - s.log.Debug().Msg("Session cannot read from destination because the connection is closed") + s.log.Error().Err(err).Msg("Failed to send session payload from destination to transport") } if closeSession { s.closeChan <- err