Cannot Send to a broadcastable socket on iOS 17 device #106588
Open
Description
Description
If you try and Send a Broadcast to a socket it will fail on iOS 17 devices with the error "no route to host". I believe this is due to the flag IP_BOUND_IF missing, described here: https://developer.apple.com/forums/thread/658518?answerId=631476022#631476022
Reproduction Steps
private static async Task TestBroadcastAsync()
{
try
{
IPAddress localIP;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
{
socket.Connect("8.8.8.8", 65530);
IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
localIP = endPoint.Address;
}
bool multicast = false;
using (var socket = new Socket(localIP.AddressFamily, SocketType.Dgram, ProtocolType.Udp))
{
if (!multicast)
{
socket.EnableBroadcast = true;
}
socket.ExclusiveAddressUse = false;
var dest = new IPEndPoint(IPAddress.Broadcast, 1900);
socket.Bind(new IPEndPoint(localIP, 0));
Debug.WriteLine($"Test-Bound ok to {localIP}");
var bytes = new ArraySegment<byte>(new byte[1]);
await socket.SendToAsync(bytes, SocketFlags.None, dest);
}
}
catch (Exception ex)
{
Debug.WriteLine("Exception: " + ex.Message);
}
}
Expected behavior
The Send to work
Actual behavior
"No route to host" exception.
Regression?
Unknown. This does work on iOS 15 devices, and iOS 17 simulators.
Known Workarounds
No response
Configuration
iPhone SE 3, iOS 17.5.1, .NET 8 (and 7)
Other information
No response