diff --git a/listener/tun/device/tun/tun_wireguard.go b/listener/tun/device/tun/tun_wireguard.go index dabd1252..50db6511 100644 --- a/listener/tun/device/tun/tun_wireguard.go +++ b/listener/tun/device/tun/tun_wireguard.go @@ -3,9 +3,10 @@ package tun import ( + "errors" "fmt" + "os" "runtime" - "strings" "github.com/Dreamacro/clash/common/pool" "github.com/Dreamacro/clash/listener/tun/device" @@ -53,9 +54,7 @@ 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.") { - + if err != nil && runtime.GOOS == "windows" && errors.Is(err, os.ErrExist) { nt, err = tun.CreateTUN(t.name, forcedMTU) } @@ -80,7 +79,9 @@ func (t *TUN) Read(packet []byte) (int, error) { } buff := pool.Get(t.offset + cap(packet)) - defer pool.Put(buff) + defer func() { + _ = pool.Put(buff) + }() n, err := t.nt.Read(buff, t.offset) if err != nil { diff --git a/main.go b/main.go index d4c38d12..bc8c7a55 100644 --- a/main.go +++ b/main.go @@ -101,7 +101,7 @@ func main() { } sigCh := make(chan os.Signal, 1) - signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM) + signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) <-sigCh // cleanup