clash/listener/sing_tun/server_windows.go
2022-12-05 11:03:28 +08:00

31 lines
614 B
Go

package sing_tun
import (
"time"
"github.com/Dreamacro/clash/log"
tun "github.com/metacubex/sing-tun"
)
func tunOpen(options tun.Options) (tunIf tun.Tun, err error) {
maxRetry := 3
for i := 0; i < maxRetry; i++ {
timeBegin := time.Now()
tunIf, err = tun.Open(options)
if err == nil {
return
}
timeEnd := time.Now()
if timeEnd.Sub(timeBegin) < 1*time.Second { // retrying for "Cannot create a file when that file already exists."
return
}
log.Warnln("Start Tun interface timeout: %s [retrying %d/%d]", err, i+1, maxRetry)
}
return
}
func init() {
tun.TunnelType = InterfaceName
}