Fix: retry create TUN on Windows

This commit is contained in:
yaling888
2022-03-20 21:22:23 +08:00
parent bac04ab54b
commit 2c0890854e
4 changed files with 16 additions and 15 deletions

View File

@ -5,6 +5,7 @@ package tun
import (
"fmt"
"runtime"
"strings"
"github.com/Dreamacro/clash/common/pool"
"github.com/Dreamacro/clash/listener/tun/device"
@ -50,9 +51,18 @@ func Open(name string, mtu uint32) (_ device.Device, err error) {
}
nt, err := tun.CreateTUN(t.name, forcedMTU) // forcedMTU do not work on wintun, need to be setting by other way
// retry if abnormal exit on Windows at last time
if err != nil && runtime.GOOS == "windows" &&
strings.HasSuffix(err.Error(), "file already exists.") {
nt, err = tun.CreateTUN(t.name, forcedMTU)
}
if err != nil {
return nil, fmt.Errorf("create tun: %w", err)
}
t.nt = nt.(*tun.NativeTun)
tunMTU, err := nt.MTU()