|
|
@ -112,12 +112,19 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // Wi
|
|
|
|
if (sock == INVALID_SOCKET) return;
|
|
|
|
if (sock == INVALID_SOCKET) return;
|
|
|
|
|
|
|
|
|
|
|
|
DWORD len = 0;
|
|
|
|
DWORD len = 0;
|
|
|
|
INTERFACE_INFO *ifo = AllocaM(INTERFACE_INFO, limit);
|
|
|
|
int num = 2;
|
|
|
|
memset(ifo, 0, limit * sizeof(*ifo));
|
|
|
|
INTERFACE_INFO *ifo = CallocT<INTERFACE_INFO>(num);
|
|
|
|
if ((WSAIoctl(sock, SIO_GET_INTERFACE_LIST, NULL, 0, &ifo[0], limit * sizeof(*ifo), &len, NULL, NULL)) != 0) {
|
|
|
|
|
|
|
|
|
|
|
|
for(;;) {
|
|
|
|
|
|
|
|
if (WSAIoctl(sock, SIO_GET_INTERFACE_LIST, NULL, 0, ifo, num * sizeof(*ifo), &len, NULL, NULL) == 0) break;
|
|
|
|
|
|
|
|
free(ifo);
|
|
|
|
|
|
|
|
if (WSAGetLastError() != WSAEFAULT) {
|
|
|
|
closesocket(sock);
|
|
|
|
closesocket(sock);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
num *= 2;
|
|
|
|
|
|
|
|
ifo = CallocT<INTERFACE_INFO>(num);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (uint j = 0; j < len / sizeof(*ifo); j++) {
|
|
|
|
for (uint j = 0; j < len / sizeof(*ifo); j++) {
|
|
|
|
if (ifo[j].iiFlags & IFF_LOOPBACK) continue;
|
|
|
|
if (ifo[j].iiFlags & IFF_LOOPBACK) continue;
|
|
|
@ -131,6 +138,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // Wi
|
|
|
|
*broadcast->Append() = NetworkAddress(address, sizeof(sockaddr));
|
|
|
|
*broadcast->Append() = NetworkAddress(address, sizeof(sockaddr));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
free(ifo);
|
|
|
|
closesocket(sock);
|
|
|
|
closesocket(sock);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|