Skip to content

Commit c81ce6d

Browse files
committed
Fix darwin batch loop not exit on EBADF
1 parent 90ea7a0 commit c81ce6d

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

stack_mixed.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
package tun
44

55
import (
6+
"errors"
7+
"syscall"
8+
69
"github.com/sagernet/gvisor/pkg/buffer"
710
"github.com/sagernet/gvisor/pkg/tcpip"
811
gHdr "github.com/sagernet/gvisor/pkg/tcpip/header"
@@ -169,7 +172,7 @@ func (m *Mixed) batchLoopDarwin(darwinTUN DarwinTUN) {
169172
for {
170173
buffers, err := darwinTUN.BatchRead()
171174
if err != nil {
172-
if E.IsClosed(err) {
175+
if E.IsClosed(err) || errors.Is(err, syscall.EBADF) {
173176
return
174177
}
175178
m.logger.Error(E.Cause(err, "batch read packet"))

stack_system.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ func (s *System) batchLoopDarwin(darwinTUN DarwinTUN) {
269269
for {
270270
buffers, err := darwinTUN.BatchRead()
271271
if err != nil {
272-
if E.IsClosed(err) {
272+
if E.IsClosed(err) || errors.Is(err, syscall.EBADF) {
273273
return
274274
}
275275
s.logger.Error(E.Cause(err, "batch read packet"))

0 commit comments

Comments
 (0)