fix win64 crashes and enable LARGE_WORLDS
This commit is contained in:
@@ -59,18 +59,16 @@ std::vector<BYTE> NetworkSocketLayer::s_freeSmallIds;
|
||||
|
||||
// only goes true on a successful Initialize(), and a failed one gets retried
|
||||
static bool s_locksCreated = false;
|
||||
|
||||
bool g_MultiplayerHost = false;
|
||||
#if defined __ORBIS__
|
||||
// Orbis has direct lan networking so it can bypass psn account checks
|
||||
bool g_MultiplayerJoin = true;
|
||||
int g_MultiplayerPort = NETWORK_LAN_DEFAULT_PORT;
|
||||
char g_MultiplayerIP[256] = "";
|
||||
#else
|
||||
#if defined _WINDOWS64
|
||||
bool g_MultiplayerHost = true;
|
||||
bool g_MultiplayerJoin = false;
|
||||
int g_MultiplayerPort = NETWORK_LAN_DEFAULT_PORT;
|
||||
char g_MultiplayerIP[256] = "127.0.0.1";
|
||||
#else
|
||||
bool g_MultiplayerHost = false;
|
||||
bool g_MultiplayerJoin = true;
|
||||
#endif
|
||||
int g_MultiplayerPort = NETWORK_LAN_DEFAULT_PORT;
|
||||
char g_MultiplayerIP[256] = "192.168.0.69";
|
||||
|
||||
|
||||
bool NetworkSocketLayer::Initialize()
|
||||
{
|
||||
@@ -1266,6 +1264,38 @@ int NetworkSocketLayer::AdvertiseThreadProc(LPVOID param)
|
||||
#ifdef __PSVITA__
|
||||
int sent = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
|
||||
(const sockaddr *)&broadcastAddr, sizeof(broadcastAddr));
|
||||
#elif defined _WINDOWS64
|
||||
//Broadcast on all interfaces.
|
||||
INTERFACE_INFO ifaces[32];
|
||||
DWORD ifaceBytes = 0;
|
||||
int numIfaces = 0;
|
||||
int sent = SOCKET_ERROR;
|
||||
if (WSAIoctl(s_advertiseSock, SIO_GET_INTERFACE_LIST, NULL, 0,
|
||||
ifaces, sizeof(ifaces), &ifaceBytes, NULL, NULL) != SOCKET_ERROR)
|
||||
{
|
||||
numIfaces = (int)(ifaceBytes / sizeof(INTERFACE_INFO));
|
||||
}
|
||||
for (int i = 0; i < numIfaces; i++)
|
||||
{
|
||||
if (!(ifaces[i].iiFlags & IFF_UP)) continue;
|
||||
if (ifaces[i].iiFlags & IFF_LOOPBACK) continue;
|
||||
if (!(ifaces[i].iiFlags & IFF_BROADCAST)) continue;
|
||||
|
||||
u_long ifIp = ifaces[i].iiAddress.AddressIn.sin_addr.s_addr;
|
||||
u_long ifMask = ifaces[i].iiNetmask.AddressIn.sin_addr.s_addr;
|
||||
broadcastAddr.sin_addr.s_addr = (ifIp & ifMask) | ~ifMask;
|
||||
|
||||
int r = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
|
||||
(struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr));
|
||||
if (r != SOCKET_ERROR) sent = r;
|
||||
}
|
||||
if (sent == SOCKET_ERROR)
|
||||
{
|
||||
// no interface worked
|
||||
broadcastAddr.sin_addr.s_addr = INADDR_BROADCAST;
|
||||
sent = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
|
||||
(struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr));
|
||||
}
|
||||
#else
|
||||
int sent = sendto(s_advertiseSock, (const char *)&data, sizeof(data), 0,
|
||||
(struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr));
|
||||
|
||||
Reference in New Issue
Block a user