From 23e2292344660b2f87024135af4496a2167a2b69 Mon Sep 17 00:00:00 2001 From: Eliot the Cougar Date: Wed, 21 Oct 2026 13:20:35 +0300 Subject: [PATCH] Transport: Pass UDP destination to dialer controllers (#7201) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/XTLS/Xray-core/pull/7201#issuecomment-6275732621 --------- Co-authored-by: 风扇滑翔翼 --- transport/internet/system_dialer.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/transport/internet/system_dialer.go b/transport/internet/system_dialer.go index 009d7646e..9f7fe8c29 100644 --- a/transport/internet/system_dialer.go +++ b/transport/internet/system_dialer.go @@ -69,9 +69,10 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne } var lc net.ListenConfig if sockopt != nil || len(Controllers) > 0 { - lc.Control = func(network, address string, c syscall.RawConn) error { + lc.Control = func(network, _ string, c syscall.RawConn) error { + // ListenPacket supplies a local address; dialer controllers need the destination. for _, ctl := range Controllers { - if err := ctl(network, address, c); err != nil { + if err := ctl(network, destAddr.String(), c); err != nil { return errors.New("failed to apply external controller").Base(err) } } @@ -197,6 +198,7 @@ func UseAlternativeSystemDialer(dialer SystemDialer) { // RegisterDialerController adds a controller to the effective system dialer. // The controller can be used to operate on file descriptors before they are put into use. +// It receives the network and resolved remote address, as in net.Dialer.Control. // It only works when effective dialer is the default dialer. // // xray:api:beta