IEnumerable<UnicastIPAddressInformation> unicastIps =
NetworkInterface.GetAllNetworkInterfaces().
Where(nic => nic.OperationalStatus == OperationalStatus.Up && nic.Supports(NetworkInterfaceComponent.IPv4)).
SelectMany(x => x.GetIPProperties().UnicastAddresses).
Where(ip => ip.Address.AddressFamily != AddressFamily.InterNetworkV6 && !IPAddress.IsLoopback(ip.Address));
foreach (UnicastIPAddressInformation ip in unicastIps) {
cancellation.ThrowIfCancellationRequested();
byte[] dgBuf = new byte[1024];
using Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.EnableBroadcast = true;
s.Bind(new IPEndPoint(ip.Address, 0));
await s.SendToAsync(sendBuffer, new IPEndPoint(IPAddress.Broadcast, 730), cancellation);
while (true) {
cancellation.ThrowIfCancellationRequested();
SocketReceiveFromResult r;
try {
r = await s.ReceiveFromAsync(dgBuf, SocketFlags.None, new IPEndPoint(IPAddress.Any, 0), cancellation);
}
catch (OperationCanceledException e) {
if (e.CancellationToken == timeoutCts.Token || timeoutCts.IsCancellationRequested) {
// Timeout, nothing responded in enough time
break;
}
else {
return;
}
}
catch {
return;
}
// process
}
}
IEnumerable<UnicastIPAddressInformation> unicastIps =
NetworkInterface.GetAllNetworkInterfaces().
Where(nic => nic.OperationalStatus == OperationalStatus.Up && nic.Supports(NetworkInterfaceComponent.IPv4)).
SelectMany(x => x.GetIPProperties().UnicastAddresses).
Where(ip => ip.Address.AddressFamily != AddressFamily.InterNetworkV6 && !IPAddress.IsLoopback(ip.Address));
foreach (UnicastIPAddressInformation ip in unicastIps) {
cancellation.ThrowIfCancellationRequested();
byte[] dgBuf = new byte[1024];
using Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.EnableBroadcast = true;
s.Bind(new IPEndPoint(ip.Address, 0));
await s.SendToAsync(sendBuffer, new IPEndPoint(IPAddress.Broadcast, 730), cancellation);
while (true) {
cancellation.ThrowIfCancellationRequested();
SocketReceiveFromResult r;
try {
r = await s.ReceiveFromAsync(dgBuf, SocketFlags.None, new IPEndPoint(IPAddress.Any, 0), cancellation);
}
catch (OperationCanceledException e) {
if (e.CancellationToken == timeoutCts.Token || timeoutCts.IsCancellationRequested) {
// Timeout, nothing responded in enough time
break;
}
else {
return;
}
}
catch {
return;
}
// process
}
}