Refresh prepared domain every 30 minutes

This commit is contained in:
yuhan6665 committed 2023-03-24 20:51:30 -04:00
1 parent 98ba220f15
commit 4d9fd8521a
2 files changed
+15 -6

No files matched your search

+5 -1
View File
@@ -87,9 +87,13 @@ func (v *V2RayPoint) RunLoop(prefIPv6 bool) (err error) {
}()
if v.AsyncResolve {
go v.dialer.PrepareDomain(v.DomainName, v.closeChan, prefIPv6)
go func() {
v.dialer.PrepareDomain(v.DomainName, v.closeChan, prefIPv6)
close(v.dialer.ResolveChan())
}()
} else {
v.dialer.PrepareDomain(v.DomainName, v.closeChan, prefIPv6)
close(v.dialer.ResolveChan())
}
err = v.pointloop()
+10 -5
View File
@@ -25,6 +25,7 @@ type resolved struct {
domain string
IPs []net.IP
Port int
lastResolved time.Time
ipIdx uint8
ipLock sync.Mutex
lastSwitched time.Time
@@ -100,7 +101,7 @@ func (d *ProtectedDialer) PrepareResolveChan() {
d.resolveChan = make(chan struct{})
}
func (d *ProtectedDialer) ResolveChan() <-chan struct{} {
func (d *ProtectedDialer) ResolveChan() chan struct{} {
return d.resolveChan
}
@@ -149,9 +150,10 @@ func (d *ProtectedDialer) lookupAddr(addr string) (*resolved, error) {
}
rs := &resolved{
domain: host,
IPs: IPs,
Port: portnum,
domain: host,
IPs: IPs,
Port: portnum,
lastResolved: time.Now(),
}
return rs, nil
@@ -163,7 +165,6 @@ func (d *ProtectedDialer) PrepareDomain(domainName string, closeCh <-chan struct
d.currentServer = domainName
d.preferIPv6 = prefIPv6
defer close(d.resolveChan)
maxRetry := 10
for {
if maxRetry == 0 {
@@ -230,6 +231,10 @@ func (d *ProtectedDialer) Dial(ctx context.Context,
}
}
if time.Since(d.vServer.lastResolved) > time.Minute*30 {
go d.PrepareDomain(Address, nil, d.preferIPv6)
}
fd, err := d.getFd(dest.Network)
if err != nil {
return nil, err