dialer: Dial directly when only one interface is available

This commit is contained in:
世界 2026-07-04 22:51:38 +08:00
parent f95a274318
commit bf280b0a02
No known key found for this signature in database
GPG Key ID: CD109927C34A63C4

View File

@ -19,6 +19,27 @@ func (d *DefaultDialer) dialParallelInterface(ctx context.Context, dialer net.Di
return nil, false, E.New("no available network interface")
}
defaultInterface := d.networkManager.InterfaceMonitor().DefaultInterface()
if len(primaryInterfaces)+len(fallbackInterfaces) == 1 {
var (
iif adapter.NetworkInterface
primary bool
)
if len(primaryInterfaces) == 1 {
iif = primaryInterfaces[0]
primary = true
} else {
iif = fallbackInterfaces[0]
}
perNetDialer := dialer
if defaultInterface == nil || iif.Index != defaultInterface.Index {
perNetDialer.Control = control.Append(perNetDialer.Control, control.BindToInterface(nil, iif.Name, iif.Index))
}
conn, err := perNetDialer.DialContext(ctx, network, addr)
if err != nil {
return nil, false, E.Cause(err, "dial ", iif.Name, " (", iif.Index, ")")
}
return conn, primary, nil
}
if fallbackDelay == 0 {
fallbackDelay = N.DefaultFallbackDelay
}
@ -93,6 +114,27 @@ func (d *DefaultDialer) dialParallelInterfaceFastFallback(ctx context.Context, d
return nil, false, E.New("no available network interface")
}
defaultInterface := d.networkManager.InterfaceMonitor().DefaultInterface()
if len(primaryInterfaces)+len(fallbackInterfaces) == 1 {
var (
iif adapter.NetworkInterface
primary bool
)
if len(primaryInterfaces) == 1 {
iif = primaryInterfaces[0]
primary = true
} else {
iif = fallbackInterfaces[0]
}
perNetDialer := dialer
if defaultInterface == nil || iif.Index != defaultInterface.Index {
perNetDialer.Control = control.Append(perNetDialer.Control, control.BindToInterface(nil, iif.Name, iif.Index))
}
conn, err := perNetDialer.DialContext(ctx, network, addr)
if err != nil {
return nil, false, E.Cause(err, "dial ", iif.Name, " (", iif.Index, ")")
}
return conn, primary, nil
}
if fallbackDelay == 0 {
fallbackDelay = N.DefaultFallbackDelay
}