Bläddra i källkod

use golang's default dual stack algo when dialling to a domain

v2ray 9 år sedan
förälder
incheckning
00fd6861a6
1 ändrade filer med 11 tillägg och 11 borttagningar
  1. 11 11
      transport/dialer/dialer.go

+ 11 - 11
transport/dialer/dialer.go

@@ -3,8 +3,8 @@ package dialer
 import (
 	"errors"
 	"net"
+	"time"
 
-	"github.com/v2ray/v2ray-core/common/dice"
 	v2net "github.com/v2ray/v2ray-core/common/net"
 )
 
@@ -13,19 +13,19 @@ var (
 )
 
 func Dial(dest v2net.Destination) (net.Conn, error) {
-	var ip net.IP
-	if dest.Address().IsIPv4() || dest.Address().IsIPv6() {
-		ip = dest.Address().IP()
-	} else {
-		ips, err := net.LookupIP(dest.Address().Domain())
-		if err != nil {
-			return nil, err
+	if dest.Address().IsDomain() {
+		dialer := &net.Dialer{
+			Timeout:   time.Second * 60,
+			DualStack: true,
 		}
-		if len(ips) == 0 {
-			return nil, ErrorInvalidHost
+		network := "tcp"
+		if dest.IsUDP() {
+			network = "udp"
 		}
-		ip = ips[dice.Roll(len(ips))]
+		return dialer.Dial(network, dest.NetAddr())
 	}
+
+	ip := dest.Address().IP()
 	if dest.IsTCP() {
 		return net.DialTCP("tcp", nil, &net.TCPAddr{
 			IP:   ip,