dialer: Dial directly when only one interface is available
This commit is contained in:
@@ -19,6 +19,27 @@ func (d *DefaultDialer) dialParallelInterface(ctx context.Context, dialer net.Di
|
|||||||
return nil, false, E.New("no available network interface")
|
return nil, false, E.New("no available network interface")
|
||||||
}
|
}
|
||||||
defaultInterface := d.networkManager.InterfaceMonitor().DefaultInterface()
|
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 {
|
if fallbackDelay == 0 {
|
||||||
fallbackDelay = N.DefaultFallbackDelay
|
fallbackDelay = N.DefaultFallbackDelay
|
||||||
}
|
}
|
||||||
@@ -93,6 +114,27 @@ func (d *DefaultDialer) dialParallelInterfaceFastFallback(ctx context.Context, d
|
|||||||
return nil, false, E.New("no available network interface")
|
return nil, false, E.New("no available network interface")
|
||||||
}
|
}
|
||||||
defaultInterface := d.networkManager.InterfaceMonitor().DefaultInterface()
|
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 {
|
if fallbackDelay == 0 {
|
||||||
fallbackDelay = N.DefaultFallbackDelay
|
fallbackDelay = N.DefaultFallbackDelay
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user