Refresh prepared domain every 30 minutes
This commit is contained in:
1 parent
98ba220f15
commit
4d9fd8521a
2 files changed
+15
-6
No files matched your search
+5
-1
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user