chore: retrying for "Cannot create a file when that file already exists."
This commit is contained in:
parent
0da49bd92b
commit
c11a359761
4 changed files with 36 additions and 2 deletions
|
@ -182,7 +182,7 @@ func New(options config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.P
|
||||||
err = E.Cause(err, "build android rules")
|
err = E.Cause(err, "build android rules")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
tunIf, err := tun.Open(tunOptions)
|
tunIf, err := tunOpen(tunOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = E.Cause(err, "configure tun interface")
|
err = E.Cause(err, "configure tun interface")
|
||||||
return
|
return
|
||||||
|
|
11
listener/sing_tun/server_notwindows.go
Normal file
11
listener/sing_tun/server_notwindows.go
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
//go:build !windows
|
||||||
|
|
||||||
|
package sing_tun
|
||||||
|
|
||||||
|
import (
|
||||||
|
tun "github.com/sagernet/sing-tun"
|
||||||
|
)
|
||||||
|
|
||||||
|
func tunOpen(options tun.Options) (tun.Tun, error) {
|
||||||
|
return tun.Open(options)
|
||||||
|
}
|
|
@ -1,6 +1,29 @@
|
||||||
package sing_tun
|
package sing_tun
|
||||||
|
|
||||||
import tun "github.com/sagernet/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() {
|
func init() {
|
||||||
tun.TunnelType = InterfaceName
|
tun.TunnelType = InterfaceName
|
||||||
|
|
Loading…
Reference in a new issue