@@ -233,6 +233,23 @@ func (cfg Config) runParent(ctx context.Context, socket string) error {
233
233
if ctx .Err () != nil {
234
234
return ctx .Err ()
235
235
}
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
+
236
253
cfg .LogHandler (ErrorLevel , "parent.sock.Accept" , err )
237
254
var ne net.Error
238
255
if errors .As (err , & ne ) && ne .Timeout () {
@@ -260,6 +277,20 @@ func (cfg Config) runExternalListener(ln net.Listener, ch chan net.Conn) {
260
277
rw , err := ln .Accept ()
261
278
262
279
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
+
263
294
cfg .LogHandler (WarnLevel , "parent." + ln .Addr ().String ()+ ".Accept" , err )
264
295
var ne net.Error
265
296
if errors .As (err , & ne ) && ne .Timeout () {
0 commit comments