From c81ce6d358ee984cdcc94389643a2d87d768d5a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Thu, 5 Mar 2026 20:32:32 +0800 Subject: [PATCH] Fix darwin batch loop not exit on EBADF --- stack_mixed.go | 5 ++++- stack_system.go | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/stack_mixed.go b/stack_mixed.go index 083ae97..6518cd0 100644 --- a/stack_mixed.go +++ b/stack_mixed.go @@ -3,6 +3,9 @@ package tun import ( + "errors" + "syscall" + "github.com/sagernet/gvisor/pkg/buffer" "github.com/sagernet/gvisor/pkg/tcpip" gHdr "github.com/sagernet/gvisor/pkg/tcpip/header" @@ -169,7 +172,7 @@ func (m *Mixed) batchLoopDarwin(darwinTUN DarwinTUN) { for { buffers, err := darwinTUN.BatchRead() if err != nil { - if E.IsClosed(err) { + if E.IsClosed(err) || errors.Is(err, syscall.EBADF) { return } m.logger.Error(E.Cause(err, "batch read packet")) diff --git a/stack_system.go b/stack_system.go index f74fef9..fa54db3 100644 --- a/stack_system.go +++ b/stack_system.go @@ -269,7 +269,7 @@ func (s *System) batchLoopDarwin(darwinTUN DarwinTUN) { for { buffers, err := darwinTUN.BatchRead() if err != nil { - if E.IsClosed(err) { + if E.IsClosed(err) || errors.Is(err, syscall.EBADF) { return } s.logger.Error(E.Cause(err, "batch read packet"))