This commit is contained in:
NaN
2026-08-04 01:56:00 -04:00
parent 83a62db82a
commit b67d9d2094
@@ -74,41 +74,6 @@ int g_MultiplayerPort = NETWORK_LAN_DEFAULT_PORT;
char g_MultiplayerIP[256] = "127.0.0.1";
#endif
#ifdef _WINDOWS64
static int GetLocalIPv4Interfaces(SOCKET socketHandle, struct in_addr *localAddresses,
struct in_addr *broadcastAddresses, int capacity)
{
INTERFACE_INFO interfaceList[32];
DWORD bytesReturned = 0;
if(WSAIoctl(socketHandle, SIO_GET_INTERFACE_LIST, NULL, 0, interfaceList,
sizeof(interfaceList), &bytesReturned, NULL, NULL) == SOCKET_ERROR)
{
return 0;
}
int interfaceCount = (int)(bytesReturned / sizeof(INTERFACE_INFO));
int resultCount = 0;
for(int i = 0; i < interfaceCount && resultCount < capacity; ++i)
{
struct sockaddr_in *address = (struct sockaddr_in *)&interfaceList[i].iiAddress;
struct sockaddr_in *netmask = (struct sockaddr_in *)&interfaceList[i].iiNetmask;
if(address->sin_family != AF_INET)
continue;
unsigned long hostAddress = ntohl(address->sin_addr.s_addr);
unsigned long hostNetmask = ntohl(netmask->sin_addr.s_addr);
if(hostAddress == 0 || (hostAddress & 0xff000000) == 0x7f000000 || hostNetmask == 0)
continue;
localAddresses[resultCount] = address->sin_addr;
broadcastAddresses[resultCount].s_addr = htonl(hostAddress | ~hostNetmask);
++resultCount;
}
return resultCount;
}
#endif
bool NetworkSocketLayer::Initialize()
{
if (s_initialized) return true;
@@ -1253,31 +1218,8 @@ int NetworkSocketLayer::AdvertiseThreadProc(LPVOID param)
data.gameHostSettings = htonl(data.gameHostSettings);
data.texturePackParentId = htonl(data.texturePackParentId);
int sent = -1;
#ifdef _WINDOWS64
struct in_addr localAddresses[32];
struct in_addr broadcastAddresses[32];
int interfaceCount = GetLocalIPv4Interfaces(s_advertiseSock, localAddresses, broadcastAddresses, 32); // this is bad fyi and needs to be replaced
for(int i = 0; i < interfaceCount; ++i)
{
broadcastAddr.sin_addr = broadcastAddresses[i];
int interfaceSent = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
(struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr));
if(interfaceSent != SOCKET_ERROR)
sent = interfaceSent;
}
if(interfaceCount == 0)
{
broadcastAddr.sin_addr.s_addr = INADDR_BROADCAST;
sent = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
(struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr));
}
#else
sent = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
int sent = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
(struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr));
#endif
#if defined _WINDOWS64 || defined _XBOX
if (sent == SOCKET_ERROR && s_advertising)
@@ -1289,7 +1231,7 @@ int NetworkSocketLayer::AdvertiseThreadProc(LPVOID param)
{
app.DebugPrintf("PS3 LAN: Broadcast sendto failed: %d\n", sent);
}
#endif
#endif
C4JThread::Sleep(1000);
}