|  | @@ -4,6 +4,8 @@ import (
 | 
	
		
			
				|  |  |  	"net"
 | 
	
		
			
				|  |  |  	"time"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	"context"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	v2net "v2ray.com/core/common/net"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -12,13 +14,13 @@ var (
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type SystemDialer interface {
 | 
	
		
			
				|  |  | -	Dial(source v2net.Address, destination v2net.Destination) (net.Conn, error)
 | 
	
		
			
				|  |  | +	Dial(ctx context.Context, source v2net.Address, destination v2net.Destination) (net.Conn, error)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type DefaultSystemDialer struct {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (v *DefaultSystemDialer) Dial(src v2net.Address, dest v2net.Destination) (net.Conn, error) {
 | 
	
		
			
				|  |  | +func (v *DefaultSystemDialer) Dial(ctx context.Context, src v2net.Address, dest v2net.Destination) (net.Conn, error) {
 | 
	
		
			
				|  |  |  	dialer := &net.Dialer{
 | 
	
		
			
				|  |  |  		Timeout:   time.Second * 60,
 | 
	
		
			
				|  |  |  		DualStack: true,
 | 
	
	
		
			
				|  | @@ -38,7 +40,7 @@ func (v *DefaultSystemDialer) Dial(src v2net.Address, dest v2net.Destination) (n
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		dialer.LocalAddr = addr
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	return dialer.Dial(dest.Network.SystemString(), dest.NetAddr())
 | 
	
		
			
				|  |  | +	return dialer.DialContext(ctx, dest.Network.SystemString(), dest.NetAddr())
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type SystemDialerAdapter interface {
 | 
	
	
		
			
				|  | @@ -55,7 +57,7 @@ func WithAdapter(dialer SystemDialerAdapter) SystemDialer {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (v *SimpleSystemDialer) Dial(src v2net.Address, dest v2net.Destination) (net.Conn, error) {
 | 
	
		
			
				|  |  | +func (v *SimpleSystemDialer) Dial(ctx context.Context, src v2net.Address, dest v2net.Destination) (net.Conn, error) {
 | 
	
		
			
				|  |  |  	return v.adapter.Dial(dest.Network.SystemString(), dest.NetAddr())
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |