Skip to content

Commit 1d09ed8

Browse files
committed
chore: simplify resolveUDPAddr
1 parent b27325e commit 1d09ed8

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

adapter/outbound/util.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ func resolveUDPAddr(ctx context.Context, network, address string, prefer C.DNSPr
3939
if err != nil {
4040
return nil, err
4141
}
42+
43+
var uint16Port uint16
44+
if port, err := strconv.ParseUint(port, 10, 16); err == nil {
45+
uint16Port = uint16(port)
46+
} else {
47+
return nil, err
48+
}
49+
4250
var ip netip.Addr
4351
switch prefer {
4452
case C.IPv4Only:
@@ -56,7 +64,10 @@ func resolveUDPAddr(ctx context.Context, network, address string, prefer C.DNSPr
5664
}
5765

5866
ip, port = resolver.LookupIP4P(ip, port)
59-
return net.ResolveUDPAddr(network, net.JoinHostPort(ip.String(), port))
67+
// our resolver always unmap before return, so unneeded unmap at here
68+
// which is different with net.ResolveUDPAddr maybe return 4in6 address
69+
// 4in6 addresses can cause some strange effects on sing-based code
70+
return net.UDPAddrFromAddrPort(netip.AddrPortFrom(ip, uint16Port)), nil
6071
}
6172

6273
func safeConnClose(c net.Conn, err error) {

0 commit comments

Comments
 (0)