@@ -233,6 +233,23 @@ func (cfg Config) runParent(ctx context.Context, socket string) error {
233233 if ctx .Err () != nil {
234234 return ctx .Err ()
235235 }
236+
237+ // Check if the error is due to listener being closed (normal shutdown)
238+ var opErr * net.OpError
239+ if errors .As (err , & opErr ) {
240+ if opErr .Op == "accept" && strings .Contains (opErr .Err .Error (), "use of closed network connection" ) {
241+ // This is expected when shutting down, don't log as error
242+ cfg .LogHandler (DebugLevel , "parent.sock.Accept" , "child listener closed during shutdown" )
243+ return nil
244+ }
245+ }
246+
247+ // Check for other network closed errors
248+ if errors .Is (err , net .ErrClosed ) {
249+ cfg .LogHandler (DebugLevel , "parent.sock.Accept" , "child listener closed" )
250+ return nil
251+ }
252+
236253 cfg .LogHandler (ErrorLevel , "parent.sock.Accept" , err )
237254 var ne net.Error
238255 if errors .As (err , & ne ) && ne .Timeout () {
@@ -260,6 +277,20 @@ func (cfg Config) runExternalListener(ln net.Listener, ch chan net.Conn) {
260277 rw , err := ln .Accept ()
261278
262279 if err != nil {
280+ // Check if the error is due to listener being closed (normal shutdown)
281+ var opErr * net.OpError
282+ if errors .As (err , & opErr ) {
283+ if opErr .Op == "accept" && strings .Contains (opErr .Err .Error (), "use of closed network connection" ) {
284+ return
285+ }
286+ }
287+
288+ // Check for other network closed errors
289+ if errors .Is (err , net .ErrClosed ) {
290+ cfg .LogHandler (DebugLevel , "parent." + ln .Addr ().String ()+ ".Accept" , "listener closed" )
291+ return
292+ }
293+
263294 cfg .LogHandler (WarnLevel , "parent." + ln .Addr ().String ()+ ".Accept" , err )
264295 var ne net.Error
265296 if errors .As (err , & ne ) && ne .Timeout () {
0 commit comments