[vm/io] Fall back to IfIndex if Ipv6IfIndex is zero

Closes https://github.com/dart-lang/sdk/pull/52906

GitOrigin-RevId: 430673ca03df64c3d4bcdc2a0284be39c455ccb0
Change-Id: I35a7098d6f677b2fde4988d091211c27f1471561
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/313161
Reviewed-by: Brian Quinlan <bquinlan@google.com>
Commit-Queue: Brian Quinlan <bquinlan@google.com>
This commit is contained in:
Niklas Schulze 2023-08-18 17:22:18 +00:00 committed by Commit Queue
parent 425182ccf8
commit f99af3ff88

View file

@ -380,10 +380,16 @@ AddressList<InterfaceSocketAddress>* SocketBase::ListInterfaces(
for (IP_ADAPTER_ADDRESSES* a = addrs; a != nullptr; a = a->Next) {
for (IP_ADAPTER_UNICAST_ADDRESS* u = a->FirstUnicastAddress; u != nullptr;
u = u->Next) {
addresses->SetAt(
i, new InterfaceSocketAddress(
u->Address.lpSockaddr,
StringUtilsWin::WideToUtf8(a->FriendlyName), a->Ipv6IfIndex));
ASSERT(type != AF_INET || a->Flags & IP_ADAPTER_IPV4_ENABLED);
ASSERT(type != AF_INET6 || a->Flags & IP_ADAPTER_IPV6_ENABLED);
ASSERT(a->IfIndex == a->Ipv6IfIndex ||
!(a->Flags & IP_ADAPTER_IPV4_ENABLED) ||
!(a->Flags & IP_ADAPTER_IPV6_ENABLED));
addresses->SetAt(i,
new InterfaceSocketAddress(
u->Address.lpSockaddr,
StringUtilsWin::WideToUtf8(a->FriendlyName),
a->Ipv6IfIndex != 0 ? a->Ipv6IfIndex : a->IfIndex));
i++;
}
}