@@ -69,14 +69,14 @@ func (l *linkTCP) dialerFor(dst *net.TCPAddr, sintf string) (*net.Dialer, error)
6969 dialer .Control = l .getControl (sintf )
7070 ief , err := net .InterfaceByName (sintf )
7171 if err != nil {
72- return nil , fmt . Errorf ( "interface %q not found" , sintf )
72+ return l . handleInterfaceError ( err , sintf , dst , dialer )
7373 }
7474 if ief .Flags & net .FlagUp == 0 {
7575 return nil , fmt .Errorf ("interface %q is not up" , sintf )
7676 }
7777 addrs , err := ief .Addrs ()
7878 if err != nil {
79- return nil , fmt . Errorf ( "interface %q addresses not available: %w" , sintf , err )
79+ return l . handleInterfaceError ( err , sintf , dst , dialer )
8080 }
8181 for addrindex , addr := range addrs {
8282 src , _ , err := net .ParseCIDR (addr .String ())
@@ -104,6 +104,10 @@ func (l *linkTCP) dialerFor(dst *net.TCPAddr, sintf string) (*net.Dialer, error)
104104 }
105105 }
106106 if dialer .LocalAddr == nil {
107+ // Mobile platform workaround: proceed without source binding if link-local
108+ if dst .IP .IsLinkLocalUnicast () && dst .Zone != "" {
109+ return dialer , nil
110+ }
107111 return nil , fmt .Errorf ("no suitable source address found on interface %q" , sintf )
108112 }
109113 }
0 commit comments