diff --git a/proxy/freedom/freedom.go b/proxy/freedom/freedom.go index 1e4e077d..20acaf30 100644 --- a/proxy/freedom/freedom.go +++ b/proxy/freedom/freedom.go @@ -381,8 +381,10 @@ func (w *PacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { if w.UDPOverride.Port != 0 { b.UDP.Port = w.UDPOverride.Port } + var ip net.Address if b.UDP.Address.Family().IsDomain() { - if ip, ok := w.resolvedUDPAddr.Load(b.UDP.Address.Domain()); ok { + var ok bool + if ip, ok = w.resolvedUDPAddr.Load(b.UDP.Address.Domain()); ok { b.UDP.Address = ip } else { ShouldUseSystemResolver := true @@ -408,11 +410,14 @@ func (w *PacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { } } } - destAddr, _ := net.ResolveUDPAddr("udp", b.UDP.NetAddr()) - if destAddr == nil { + if ip == nil { b.Release() continue } + destAddr := &net.UDPAddr{ + IP: ip.IP(), + Port: int(b.UDP.Port), + } n, err = w.PacketConnWrapper.WriteTo(b.Bytes(), destAddr) } else { n, err = w.PacketConnWrapper.Write(b.Bytes())