fix: allow same-address browser dialer port reuse across outbounds

Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/b21c3fc4-8476-4107-975a-9d921d55ffea

Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-26 16:39:27 +00:00
committed by GitHub
parent 12ecf47fcc
commit 64f783f2b0
2 changed files with 51 additions and 1 deletions
@@ -173,6 +173,10 @@ func getDialerByAddress(addr string) (*dialerInstance, error) {
if !ok {
return nil, errors.New("invalid sockopt.browserDialer: ", addr)
}
_, port, err := net.SplitHostPort(listenAddr)
if err != nil {
return nil, errors.New("invalid sockopt.browserDialer: ", addr)
}
key := listenAddr + path
@@ -191,6 +195,12 @@ func getDialerByAddress(addr string) (*dialerInstance, error) {
server, found := dialerServers[listenAddr]
if !found {
for existingAddr := range dialerServers {
_, existingPort, splitErr := net.SplitHostPort(existingAddr)
if splitErr == nil && existingPort == port {
return nil, errors.New("sockopt.browserDialer cannot use the same port with a different listen address: ", existingAddr, " and ", listenAddr)
}
}
newServer, serverErr := newDialerServer(listenAddr)
if serverErr != nil {
return nil, serverErr