mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2024-09-12 11:52:33 +00:00
30 lines
613 B
Go
30 lines
613 B
Go
package sing_tun
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/Dreamacro/clash/log"
|
|
|
|
tun "github.com/sagernet/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
|
|
}
|