mirror of
https://github.com/rehlds/rehlds.git
synced 2025-01-01 01:25:38 +03:00
Refactoring: use SOCKET type for sockets, simplified code for invalid socket value. (#359)
* Refactoring: use SOCKET type for sockets, simplified code for invalid socket value. Fixed bug in reversing. * Fixed Linux build.
This commit is contained in:
parent
5c34ee85ea
commit
c55837e42a
@ -55,16 +55,24 @@ sizebuf_t in_message;
|
|||||||
netadr_t in_from;
|
netadr_t in_from;
|
||||||
|
|
||||||
#if defined(REHLDS_FIXES) && !defined(HOOK_ENGINE)
|
#if defined(REHLDS_FIXES) && !defined(HOOK_ENGINE)
|
||||||
int ip_sockets[3] = {INVALID_SOCKET, INVALID_SOCKET, INVALID_SOCKET};
|
// Define default to INVALID_SOCKET
|
||||||
|
#define INV_SOCK INVALID_SOCKET
|
||||||
#else
|
#else
|
||||||
int ip_sockets[3];
|
// Original engine behavior
|
||||||
|
#define INV_SOCK 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HOOK_ENGINE
|
||||||
|
SOCKET ip_sockets[3] = { INV_SOCK, INV_SOCK, INV_SOCK };
|
||||||
|
#else
|
||||||
|
SOCKET ip_sockets[3];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#if defined(REHLDS_FIXES) && !defined(HOOK_ENGINE)
|
#ifndef HOOK_ENGINE
|
||||||
int ipx_sockets[3] = {INVALID_SOCKET, INVALID_SOCKET, INVALID_SOCKET};
|
SOCKET ipx_sockets[3] = { INV_SOCK, INV_SOCK, INV_SOCK };
|
||||||
#else
|
#else
|
||||||
int ipx_sockets[3];
|
SOCKET ipx_sockets[3];
|
||||||
#endif
|
#endif
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
@ -353,7 +361,7 @@ char *NET_AdrToString(const netadr_t& a)
|
|||||||
else if (a.type == NA_IP)
|
else if (a.type == NA_IP)
|
||||||
Q_snprintf(s, sizeof(s), "%i.%i.%i.%i:%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3], ntohs(a.port));
|
Q_snprintf(s, sizeof(s), "%i.%i.%i.%i:%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3], ntohs(a.port));
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
else
|
else // NA_IPX
|
||||||
Q_snprintf(s, sizeof(s), "%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x:%i", a.ipx[0], a.ipx[1], a.ipx[2], a.ipx[3], a.ipx[4], a.ipx[5], a.ipx[6], a.ipx[7], a.ipx[8], a.ipx[9], ntohs(a.port));
|
Q_snprintf(s, sizeof(s), "%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x:%i", a.ipx[0], a.ipx[1], a.ipx[2], a.ipx[3], a.ipx[4], a.ipx[5], a.ipx[6], a.ipx[7], a.ipx[8], a.ipx[9], ntohs(a.port));
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
@ -373,7 +381,7 @@ char *NET_BaseAdrToString(netadr_t& a)
|
|||||||
Q_snprintf(s, sizeof(s), "%i.%i.%i.%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3]);
|
Q_snprintf(s, sizeof(s), "%i.%i.%i.%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3]);
|
||||||
}
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
else
|
else // NA_IPX
|
||||||
{
|
{
|
||||||
Q_snprintf(s, sizeof(s), "%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x", a.ipx[0], a.ipx[1], a.ipx[2], a.ipx[3], a.ipx[4], a.ipx[5], a.ipx[6], a.ipx[7], a.ipx[8], a.ipx[9]);
|
Q_snprintf(s, sizeof(s), "%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x", a.ipx[0], a.ipx[1], a.ipx[2], a.ipx[3], a.ipx[4], a.ipx[5], a.ipx[6], a.ipx[7], a.ipx[8], a.ipx[9]);
|
||||||
}
|
}
|
||||||
@ -831,15 +839,11 @@ void NET_FlushSocket(netsrc_t sock)
|
|||||||
{
|
{
|
||||||
struct sockaddr from;
|
struct sockaddr from;
|
||||||
socklen_t fromlen;
|
socklen_t fromlen;
|
||||||
int net_socket;
|
SOCKET net_socket;
|
||||||
unsigned char buf[MAX_UDP_PACKET];
|
unsigned char buf[MAX_UDP_PACKET];
|
||||||
|
|
||||||
net_socket = ip_sockets[sock];
|
net_socket = ip_sockets[sock];
|
||||||
#ifdef REHLDS_FIXES
|
if (net_socket != INV_SOCK)
|
||||||
if (net_socket != INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (net_socket)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
fromlen = 16;
|
fromlen = 16;
|
||||||
while (CRehldsPlatformHolder::get()->recvfrom(net_socket, (char*)buf, sizeof buf, 0, &from, &fromlen) > 0)
|
while (CRehldsPlatformHolder::get()->recvfrom(net_socket, (char*)buf, sizeof buf, 0, &from, &fromlen) > 0)
|
||||||
@ -958,7 +962,7 @@ qboolean NET_QueuePacket(netsrc_t sock)
|
|||||||
int ret;
|
int ret;
|
||||||
struct sockaddr from;
|
struct sockaddr from;
|
||||||
socklen_t fromlen;
|
socklen_t fromlen;
|
||||||
int net_socket;
|
SOCKET net_socket;
|
||||||
int protocol;
|
int protocol;
|
||||||
unsigned char buf[MAX_UDP_PACKET];
|
unsigned char buf[MAX_UDP_PACKET];
|
||||||
|
|
||||||
@ -979,11 +983,7 @@ qboolean NET_QueuePacket(netsrc_t sock)
|
|||||||
net_socket = ipx_sockets[sock];
|
net_socket = ipx_sockets[sock];
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
#ifdef REHLDS_FIXES
|
if (net_socket == INV_SOCK)
|
||||||
if (net_socket == INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (!net_socket)
|
|
||||||
#endif
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
fromlen = sizeof(from);
|
fromlen = sizeof(from);
|
||||||
@ -1021,36 +1021,34 @@ qboolean NET_QueuePacket(netsrc_t sock)
|
|||||||
Con_NetPrintf("%s: Oversize packet from %s\n", __func__, NET_AdrToString(in_from));
|
Con_NetPrintf("%s: Oversize packet from %s\n", __func__, NET_AdrToString(in_from));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == -1 || ret == MAX_UDP_PACKET) {
|
if (ret == -1 || ret == MAX_UDP_PACKET)
|
||||||
|
{
|
||||||
return NET_LagPacket(0, sock, 0, 0);
|
return NET_LagPacket(0, sock, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
NET_TransferRawData(&in_message, buf, ret);
|
NET_TransferRawData(&in_message, buf, ret);
|
||||||
if (*(uint32 *)in_message.data == 0xFFFFFFFE)
|
|
||||||
{
|
|
||||||
if (in_message.cursize >= 9)
|
|
||||||
{
|
|
||||||
#ifdef REHLDS_FIXES
|
|
||||||
// Only server can send split packets, there is no server<->server communication, so server can't receive split packets
|
|
||||||
if (sock == NS_SERVER)
|
|
||||||
{
|
|
||||||
Con_NetPrintf("Someone tries to send split packet to the server\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return NET_GetLong(in_message.data, ret, &in_message.cursize);
|
if (*(uint32 *)in_message.data != 0xFFFFFFFE)
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Con_NetPrintf("Invalid split packet length %i\n", in_message.cursize);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return NET_LagPacket(1, sock, &in_from, &in_message);
|
return NET_LagPacket(1, sock, &in_from, &in_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in_message.cursize < 9)
|
||||||
|
{
|
||||||
|
Con_NetPrintf("Invalid split packet length %i\n", in_message.cursize);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef REHLDS_FIXES
|
||||||
|
// Only server can send split packets, there is no server<->server communication, so server can't receive split packets
|
||||||
|
if (sock == NS_SERVER)
|
||||||
|
{
|
||||||
|
Con_NetPrintf("Someone tries to send split packet to the server\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return NET_GetLong(in_message.data, ret, &in_message.cursize);
|
||||||
}
|
}
|
||||||
|
|
||||||
DLL_EXPORT int NET_Sleep_Timeout(void)
|
DLL_EXPORT int NET_Sleep_Timeout(void)
|
||||||
@ -1064,8 +1062,8 @@ DLL_EXPORT int NET_Sleep_Timeout(void)
|
|||||||
static int staggerFrames;
|
static int staggerFrames;
|
||||||
int32 curtime;
|
int32 curtime;
|
||||||
|
|
||||||
fps = (int) sys_ticrate.value;
|
fps = (int)sys_ticrate.value;
|
||||||
curtime = (int) Sys_FloatTime();
|
curtime = (int)Sys_FloatTime();
|
||||||
if (lasttime)
|
if (lasttime)
|
||||||
{
|
{
|
||||||
if (curtime - lasttime > 1)
|
if (curtime - lasttime > 1)
|
||||||
@ -1083,28 +1081,26 @@ DLL_EXPORT int NET_Sleep_Timeout(void)
|
|||||||
FD_ZERO(&fdset);
|
FD_ZERO(&fdset);
|
||||||
number = 0;
|
number = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int sock = 0; sock < 3; sock++)
|
||||||
{
|
{
|
||||||
int sock = ip_sockets[i];
|
SOCKET net_socket = ip_sockets[sock];
|
||||||
|
if (net_socket != INV_SOCK)
|
||||||
|
{
|
||||||
|
FD_SET(net_socket, &fdset);
|
||||||
|
|
||||||
#ifdef REHLDS_FIXES
|
if (number < net_socket)
|
||||||
if (sock != INVALID_SOCKET)
|
number = net_socket;
|
||||||
#else
|
}
|
||||||
if (sock >= 0)
|
|
||||||
#endif
|
|
||||||
FD_SET(sock, &fdset);
|
|
||||||
|
|
||||||
if (number < sock)
|
|
||||||
number = sock;
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
sock = ipx_sockets[i];
|
net_socket = ipx_sockets[sock];
|
||||||
|
if (net_socket != INV_SOCK)
|
||||||
|
{
|
||||||
|
FD_SET(net_socket, &fdset);
|
||||||
|
|
||||||
if (sock >= 0)
|
if (number < net_socket)
|
||||||
FD_SET(sock, &fdset);
|
number = net_socket;
|
||||||
|
}
|
||||||
if (number < sock)
|
|
||||||
number = sock;
|
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1113,18 +1109,17 @@ DLL_EXPORT int NET_Sleep_Timeout(void)
|
|||||||
if (tv.tv_usec <= 0)
|
if (tv.tv_usec <= 0)
|
||||||
tv.tv_usec = 1;
|
tv.tv_usec = 1;
|
||||||
|
|
||||||
|
int res;
|
||||||
if (numFrames > 0 && numFrames % staggerFrames)
|
if (numFrames > 0 && numFrames % staggerFrames)
|
||||||
{
|
{
|
||||||
int res = select(number + 1, &fdset, 0, 0, &tv);
|
res = select(number + 1, &fdset, 0, 0, &tv);
|
||||||
--numFrames;
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int res = select(0, 0, 0, 0, &tv);
|
res = select(0, 0, 0, 0, &tv);
|
||||||
--numFrames;
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
--numFrames;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NET_Sleep(void)
|
int NET_Sleep(void)
|
||||||
@ -1136,28 +1131,26 @@ int NET_Sleep(void)
|
|||||||
FD_ZERO(&fdset);
|
FD_ZERO(&fdset);
|
||||||
number = 0;
|
number = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int sock = 0; sock < 3; sock++)
|
||||||
{
|
{
|
||||||
int sock = ip_sockets[i];
|
SOCKET net_socket = ip_sockets[sock];
|
||||||
|
if (net_socket != INV_SOCK)
|
||||||
|
{
|
||||||
|
FD_SET(net_socket, &fdset);
|
||||||
|
|
||||||
#ifdef REHLDS_FIXES
|
if (number < net_socket)
|
||||||
if (sock != INVALID_SOCKET)
|
number = net_socket;
|
||||||
#else
|
}
|
||||||
if (sock >= 0)
|
|
||||||
#endif
|
|
||||||
FD_SET(sock, &fdset);
|
|
||||||
|
|
||||||
if (number < sock)
|
|
||||||
number = sock;
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
sock = ipx_sockets[i];
|
net_socket = ipx_sockets[sock];
|
||||||
|
if (net_socket != INV_SOCK)
|
||||||
|
{
|
||||||
|
FD_SET(net_socket, &fdset);
|
||||||
|
|
||||||
if (sock >= 0)
|
if (number < net_socket)
|
||||||
FD_SET(sock, &fdset);
|
number = net_socket;
|
||||||
|
}
|
||||||
if (number < sock)
|
|
||||||
number = sock;
|
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1319,7 +1312,8 @@ void NET_FlushQueues(void)
|
|||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
net_messages_t *p = messages[i];
|
net_messages_t *p = messages[i];
|
||||||
while (p) {
|
while (p)
|
||||||
|
{
|
||||||
net_messages_t *n = p->next;
|
net_messages_t *n = p->next;
|
||||||
Mem_Free(p->buffer);
|
Mem_Free(p->buffer);
|
||||||
Mem_Free(p);
|
Mem_Free(p);
|
||||||
@ -1330,7 +1324,8 @@ void NET_FlushQueues(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
net_messages_t *p = normalqueue;
|
net_messages_t *p = normalqueue;
|
||||||
while (p) {
|
while (p)
|
||||||
|
{
|
||||||
net_messages_t *n = p->next;
|
net_messages_t *n = p->next;
|
||||||
Mem_Free(p->buffer);
|
Mem_Free(p->buffer);
|
||||||
Mem_Free(p);
|
Mem_Free(p);
|
||||||
@ -1339,7 +1334,7 @@ void NET_FlushQueues(void)
|
|||||||
normalqueue = NULL;
|
normalqueue = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NET_SendLong(netsrc_t sock, int s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen)
|
int NET_SendLong(netsrc_t sock, SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen)
|
||||||
{
|
{
|
||||||
static long gSequenceNumber = 1;
|
static long gSequenceNumber = 1;
|
||||||
|
|
||||||
@ -1404,15 +1399,13 @@ int NET_SendLong(netsrc_t sock, int s, const char *buf, int len, int flags, cons
|
|||||||
|
|
||||||
return totalSent;
|
return totalSent;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
int nSend = CRehldsPlatformHolder::get()->sendto(s, buf, len, flags, to, tolen);
|
||||||
int nSend = 0;
|
return nSend;
|
||||||
nSend = CRehldsPlatformHolder::get()->sendto(s, buf, len, flags, to, tolen);
|
|
||||||
return nSend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EXT_FUNC NET_SendPacket_api(unsigned int length, void *data, const netadr_t &to) {
|
void EXT_FUNC NET_SendPacket_api(unsigned int length, void *data, const netadr_t &to)
|
||||||
|
{
|
||||||
NET_SendPacket(NS_SERVER, length, data, to);
|
NET_SendPacket(NS_SERVER, length, data, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1420,7 +1413,7 @@ void NET_SendPacket(netsrc_t sock, int length, void *data, const netadr_t& to)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct sockaddr addr;
|
struct sockaddr addr;
|
||||||
int net_socket;
|
SOCKET net_socket;
|
||||||
|
|
||||||
if (to.type == NA_LOOPBACK)
|
if (to.type == NA_LOOPBACK)
|
||||||
{
|
{
|
||||||
@ -1431,42 +1424,26 @@ void NET_SendPacket(netsrc_t sock, int length, void *data, const netadr_t& to)
|
|||||||
if (to.type == NA_BROADCAST)
|
if (to.type == NA_BROADCAST)
|
||||||
{
|
{
|
||||||
net_socket = ip_sockets[sock];
|
net_socket = ip_sockets[sock];
|
||||||
#ifdef REHLDS_FIXES
|
if (net_socket == INV_SOCK)
|
||||||
if (net_socket == INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (!net_socket)
|
|
||||||
#endif // REHLDS_FIXES
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (to.type == NA_IP)
|
else if (to.type == NA_IP)
|
||||||
{
|
{
|
||||||
net_socket = ip_sockets[sock];
|
net_socket = ip_sockets[sock];
|
||||||
#ifdef REHLDS_FIXES
|
if (net_socket == INV_SOCK)
|
||||||
if (net_socket == INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (!net_socket)
|
|
||||||
#endif // REHLDS_FIXES
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
else if (to.type == NA_IPX)
|
else if (to.type == NA_IPX)
|
||||||
{
|
{
|
||||||
net_socket = ipx_sockets[sock];
|
net_socket = ipx_sockets[sock];
|
||||||
#ifdef REHLDS_FIXES
|
if (net_socket == INV_SOCK)
|
||||||
if (net_socket == INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (!net_socket)
|
|
||||||
#endif // REHLDS_FIXES
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (to.type == NA_BROADCAST_IPX)
|
else if (to.type == NA_BROADCAST_IPX)
|
||||||
{
|
{
|
||||||
net_socket = ipx_sockets[sock];
|
net_socket = ipx_sockets[sock];
|
||||||
#ifdef REHLDS_FIXES
|
if (net_socket == INV_SOCK)
|
||||||
if (net_socket == INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (!net_socket)
|
|
||||||
#endif // REHLDS_FIXES
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
@ -1516,20 +1493,14 @@ void NET_SendPacket(netsrc_t sock, int length, void *data, const netadr_t& to)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
SOCKET NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
||||||
{
|
{
|
||||||
int newsocket;
|
SOCKET newsocket;
|
||||||
struct sockaddr_in address;
|
struct sockaddr_in address;
|
||||||
qboolean _true = TRUE;
|
qboolean _true = TRUE;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
#ifdef REHLDS_FIXES
|
|
||||||
const int invalid_socket = INVALID_SOCKET;
|
|
||||||
#else
|
|
||||||
const int invalid_socket = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if ((newsocket = CRehldsPlatformHolder::get()->socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)
|
if ((newsocket = CRehldsPlatformHolder::get()->socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)
|
||||||
#else
|
#else
|
||||||
@ -1541,9 +1512,9 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
{
|
{
|
||||||
Con_Printf("WARNING: UDP_OpenSocket: port: %d socket: %s", port, NET_ErrorString(err));
|
Con_Printf("WARNING: UDP_OpenSocket: port: %d socket: %s", port, NET_ErrorString(err));
|
||||||
}
|
}
|
||||||
|
return INV_SOCK;
|
||||||
return invalid_socket;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (CRehldsPlatformHolder::get()->ioctlsocket(newsocket, FIONBIO, (u_long *)&_true) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->ioctlsocket(newsocket, FIONBIO, (u_long *)&_true) == SOCKET_ERROR)
|
||||||
#else
|
#else
|
||||||
@ -1551,8 +1522,9 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
{
|
{
|
||||||
Con_Printf("WARNING: UDP_OpenSocket: port: %d ioctl FIONBIO: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
Con_Printf("WARNING: UDP_OpenSocket: port: %d ioctl FIONBIO: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == SOCKET_ERROR)
|
||||||
#else
|
#else
|
||||||
@ -1560,8 +1532,9 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Con_Printf ("WARNING: UDP_OpenSocket: port: %d setsockopt SO_BROADCAST: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
Con_Printf ("WARNING: UDP_OpenSocket: port: %d setsockopt SO_BROADCAST: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (COM_CheckParm("-reuse") || multicast)
|
if (COM_CheckParm("-reuse") || multicast)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -1571,9 +1544,10 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
{
|
{
|
||||||
Con_Printf ("WARNING: UDP_OpenSocket: port: %d setsockopt SO_REUSEADDR: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
Con_Printf ("WARNING: UDP_OpenSocket: port: %d setsockopt SO_REUSEADDR: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (COM_CheckParm("-tos"))
|
if (COM_CheckParm("-tos"))
|
||||||
{
|
{
|
||||||
@ -1584,10 +1558,11 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
err = NET_GetLastError();
|
err = NET_GetLastError();
|
||||||
if (err != WSAENOPROTOOPT)
|
if (err != WSAENOPROTOOPT)
|
||||||
Con_Printf("WARNING: UDP_OpenSocket: port: %d setsockopt IP_TOS: %s\n", port, NET_ErrorString(err));
|
Con_Printf("WARNING: UDP_OpenSocket: port: %d setsockopt IP_TOS: %s\n", port, NET_ErrorString(err));
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
if (net_interface && *net_interface && Q_stricmp(net_interface, "localhost"))
|
if (net_interface && *net_interface && Q_stricmp(net_interface, "localhost"))
|
||||||
NET_StringToSockaddr(net_interface, (sockaddr *)&address);
|
NET_StringToSockaddr(net_interface, (sockaddr *)&address);
|
||||||
else
|
else
|
||||||
@ -1595,9 +1570,11 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
|
|
||||||
if (port == -1)
|
if (port == -1)
|
||||||
address.sin_port = 0;
|
address.sin_port = 0;
|
||||||
else address.sin_port = htons((u_short)port);
|
else
|
||||||
|
address.sin_port = htons((u_short)port);
|
||||||
|
|
||||||
address.sin_family = AF_INET;
|
address.sin_family = AF_INET;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (CRehldsPlatformHolder::get()->bind(newsocket, (struct sockaddr *)&address, sizeof(address)) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->bind(newsocket, (struct sockaddr *)&address, sizeof(address)) == SOCKET_ERROR)
|
||||||
#else
|
#else
|
||||||
@ -1610,8 +1587,9 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
#else
|
#else
|
||||||
SOCKET_CLOSE(newsocket);
|
SOCKET_CLOSE(newsocket);
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = COM_CheckParm("-loopback") != 0;
|
i = COM_CheckParm("-loopback") != 0;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&i, sizeof(i)) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&i, sizeof(i)) == SOCKET_ERROR)
|
||||||
@ -1622,7 +1600,7 @@ int NET_IPSocket(char *net_interface, int port, qboolean multicast)
|
|||||||
Con_DPrintf("WARNING: UDP_OpenSocket: port %d setsockopt IP_MULTICAST_LOOP: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
Con_DPrintf("WARNING: UDP_OpenSocket: port %d setsockopt IP_MULTICAST_LOOP: %s\n", port, NET_ErrorString(NET_GetLastError()));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined __linux__ && defined REHLDS_FIXES
|
#if !defined _WIN32 && defined REHLDS_FIXES
|
||||||
i = IP_PMTUDISC_DONT;
|
i = IP_PMTUDISC_DONT;
|
||||||
if (setsockopt(newsocket, IPPROTO_IP, IP_MTU_DISCOVER, (char *)&i, sizeof(i)) == SOCKET_ERROR)
|
if (setsockopt(newsocket, IPPROTO_IP, IP_MTU_DISCOVER, (char *)&i, sizeof(i)) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
@ -1643,16 +1621,11 @@ void NET_OpenIP(void)
|
|||||||
//int mc_port;//unused?
|
//int mc_port;//unused?
|
||||||
static qboolean bFirst = TRUE;
|
static qboolean bFirst = TRUE;
|
||||||
|
|
||||||
port = 0;
|
|
||||||
dedicated = g_pcls.state == ca_dedicated;
|
dedicated = g_pcls.state == ca_dedicated;
|
||||||
|
|
||||||
NET_ThreadLock();
|
NET_ThreadLock();
|
||||||
|
|
||||||
#ifdef REHLDS_FIXES
|
if (ip_sockets[NS_SERVER] == INV_SOCK)
|
||||||
if (ip_sockets[NS_SERVER] == INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (!ip_sockets[NS_SERVER])
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
port = (int)iphostport.value;
|
port = (int)iphostport.value;
|
||||||
|
|
||||||
@ -1667,27 +1640,21 @@ void NET_OpenIP(void)
|
|||||||
}
|
}
|
||||||
ip_sockets[NS_SERVER] = NET_IPSocket(ipname.string, port, FALSE);
|
ip_sockets[NS_SERVER] = NET_IPSocket(ipname.string, port, FALSE);
|
||||||
|
|
||||||
#ifdef REHLDS_FIXES
|
if (ip_sockets[NS_SERVER] == INV_SOCK && dedicated)
|
||||||
if (ip_sockets[NS_SERVER] == INVALID_SOCKET && dedicated)
|
|
||||||
#else
|
|
||||||
if (!ip_sockets[NS_SERVER] && dedicated)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
Sys_Error("%s: Couldn't allocate dedicated server IP port %d.", __func__, port);
|
Sys_Error("%s: Couldn't allocate dedicated server IP port %d.", __func__, port);
|
||||||
}
|
}
|
||||||
sv_port = port;
|
sv_port = port;
|
||||||
}
|
}
|
||||||
|
|
||||||
NET_ThreadUnlock();
|
NET_ThreadUnlock();
|
||||||
|
|
||||||
if (dedicated)
|
if (dedicated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
NET_ThreadLock();
|
NET_ThreadLock();
|
||||||
#ifdef REHLDS_FIXES
|
|
||||||
if (ip_sockets[NS_CLIENT] == INVALID_SOCKET)
|
if (ip_sockets[NS_CLIENT] == INV_SOCK)
|
||||||
#else
|
|
||||||
if (!ip_sockets[NS_CLIENT])
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
port = (int)ip_clientport.value;
|
port = (int)ip_clientport.value;
|
||||||
|
|
||||||
@ -1698,28 +1665,18 @@ void NET_OpenIP(void)
|
|||||||
port = -1;
|
port = -1;
|
||||||
}
|
}
|
||||||
ip_sockets[NS_CLIENT] = NET_IPSocket(ipname.string, port, FALSE);
|
ip_sockets[NS_CLIENT] = NET_IPSocket(ipname.string, port, FALSE);
|
||||||
#ifdef REHLDS_FIXES
|
if (ip_sockets[NS_CLIENT] == INV_SOCK)
|
||||||
if (ip_sockets[NS_CLIENT] == INVALID_SOCKET)
|
|
||||||
#else
|
|
||||||
if (!ip_sockets[NS_CLIENT])
|
|
||||||
#endif
|
|
||||||
ip_sockets[NS_CLIENT] = NET_IPSocket(ipname.string, -1, FALSE);
|
ip_sockets[NS_CLIENT] = NET_IPSocket(ipname.string, -1, FALSE);
|
||||||
cl_port = port;
|
cl_port = port;
|
||||||
}
|
}
|
||||||
#ifdef REHLDS_FIXES
|
|
||||||
if (ip_sockets[NS_MULTICAST] == INVALID_SOCKET)
|
if (ip_sockets[NS_MULTICAST] == INV_SOCK)
|
||||||
#else
|
|
||||||
if (!ip_sockets[NS_MULTICAST])
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
ip_sockets[NS_MULTICAST] = NET_IPSocket(ipname.string, multicastport.value, TRUE);
|
ip_sockets[NS_MULTICAST] = NET_IPSocket(ipname.string, multicastport.value, TRUE);
|
||||||
#ifdef REHLDS_FIXES
|
if (ip_sockets[NS_MULTICAST] == INV_SOCK && !dedicated)
|
||||||
if (ip_sockets[NS_MULTICAST] == INVALID_SOCKET && !dedicated)
|
|
||||||
#else
|
|
||||||
if (!ip_sockets[NS_MULTICAST] && !dedicated)
|
|
||||||
#endif
|
|
||||||
Con_Printf("Warning! Couldn't allocate multicast IP port.\n");
|
Con_Printf("Warning! Couldn't allocate multicast IP port.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
NET_ThreadUnlock();
|
NET_ThreadUnlock();
|
||||||
|
|
||||||
if (bFirst)
|
if (bFirst)
|
||||||
@ -1731,19 +1688,13 @@ void NET_OpenIP(void)
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
int NET_IPXSocket(int hostshort)
|
SOCKET NET_IPXSocket(int hostshort)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
u_long optval = 1;
|
u_long optval = 1;
|
||||||
SOCKET newsocket;
|
SOCKET newsocket;
|
||||||
SOCKADDR_IPX address;
|
SOCKADDR_IPX address;
|
||||||
|
|
||||||
#ifdef REHLDS_FIXES
|
|
||||||
const int invalid_socket = INVALID_SOCKET;
|
|
||||||
#else
|
|
||||||
const int invalid_socket = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if((newsocket = CRehldsPlatformHolder::get()->socket(PF_IPX, SOCK_DGRAM, NSPROTO_IPX)) == INVALID_SOCKET)
|
if((newsocket = CRehldsPlatformHolder::get()->socket(PF_IPX, SOCK_DGRAM, NSPROTO_IPX)) == INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
err = NET_GetLastError();
|
err = NET_GetLastError();
|
||||||
@ -1752,26 +1703,26 @@ int NET_IPXSocket(int hostshort)
|
|||||||
Con_Printf("WARNING: IPX_Socket: port: %d socket: %s\n", hostshort, NET_ErrorString(err));
|
Con_Printf("WARNING: IPX_Socket: port: %d socket: %s\n", hostshort, NET_ErrorString(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
if (CRehldsPlatformHolder::get()->ioctlsocket(newsocket, FIONBIO, &optval) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->ioctlsocket(newsocket, FIONBIO, &optval) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
err = NET_GetLastError();
|
err = NET_GetLastError();
|
||||||
Con_Printf("WARNING: IPX_Socket: port: %d ioctl FIONBIO: %s\n", hostshort, NET_ErrorString(err));
|
Con_Printf("WARNING: IPX_Socket: port: %d ioctl FIONBIO: %s\n", hostshort, NET_ErrorString(err));
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, SOL_SOCKET, SO_BROADCAST, (const char *)&optval, sizeof(optval)) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, SOL_SOCKET, SO_BROADCAST, (const char *)&optval, sizeof(optval)) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
err = NET_GetLastError();
|
err = NET_GetLastError();
|
||||||
Con_Printf("WARNING: IPX_Socket: port: %d setsockopt SO_BROADCAST: %s\n", hostshort, NET_ErrorString(err));
|
Con_Printf("WARNING: IPX_Socket: port: %d setsockopt SO_BROADCAST: %s\n", hostshort, NET_ErrorString(err));
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, SOL_SOCKET, 4, (const char *)&optval, sizeof(optval)) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->setsockopt(newsocket, SOL_SOCKET, 4, (const char *)&optval, sizeof(optval)) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
#ifndef REHLDS_FIXES
|
#ifndef REHLDS_FIXES
|
||||||
err = NET_GetLastError();
|
err = NET_GetLastError();
|
||||||
#endif
|
#endif
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
address.sa_family = AF_IPX;
|
address.sa_family = AF_IPX;
|
||||||
@ -1787,7 +1738,7 @@ int NET_IPXSocket(int hostshort)
|
|||||||
err = NET_GetLastError();
|
err = NET_GetLastError();
|
||||||
Con_Printf("WARNING: IPX_Socket: port: %d bind: %s\n", hostshort, NET_ErrorString(err));
|
Con_Printf("WARNING: IPX_Socket: port: %d bind: %s\n", hostshort, NET_ErrorString(err));
|
||||||
CRehldsPlatformHolder::get()->closesocket(newsocket);
|
CRehldsPlatformHolder::get()->closesocket(newsocket);
|
||||||
return invalid_socket;
|
return INV_SOCK;
|
||||||
}
|
}
|
||||||
return newsocket;
|
return newsocket;
|
||||||
}
|
}
|
||||||
@ -1798,8 +1749,10 @@ void NET_OpenIPX(void)
|
|||||||
int dedicated;
|
int dedicated;
|
||||||
|
|
||||||
dedicated = g_pcls.state == ca_dedicated;
|
dedicated = g_pcls.state == ca_dedicated;
|
||||||
|
|
||||||
NET_ThreadLock();
|
NET_ThreadLock();
|
||||||
if (!ipx_sockets[NS_SERVER])
|
|
||||||
|
if (ipx_sockets[NS_SERVER] == INV_SOCK)
|
||||||
{
|
{
|
||||||
port = ipx_hostport.value;
|
port = ipx_hostport.value;
|
||||||
if (!port)
|
if (!port)
|
||||||
@ -1813,26 +1766,30 @@ void NET_OpenIPX(void)
|
|||||||
}
|
}
|
||||||
ipx_sockets[NS_SERVER] = NET_IPXSocket(port);
|
ipx_sockets[NS_SERVER] = NET_IPXSocket(port);
|
||||||
}
|
}
|
||||||
NET_ThreadUnlock();
|
|
||||||
if(!dedicated)
|
|
||||||
{
|
|
||||||
NET_ThreadLock();
|
|
||||||
if (!ipx_sockets[NS_CLIENT])
|
|
||||||
{
|
|
||||||
port = ipx_clientport.value;
|
|
||||||
if (!port)
|
|
||||||
{
|
|
||||||
port = clientport.value;
|
|
||||||
if (!port)
|
|
||||||
port = -1;
|
|
||||||
}
|
|
||||||
ipx_sockets[NS_CLIENT] = NET_IPXSocket(port);
|
|
||||||
|
|
||||||
if (!ipx_sockets[NS_CLIENT])
|
NET_ThreadUnlock();
|
||||||
ipx_sockets[NS_CLIENT] = NET_IPXSocket(-1);
|
|
||||||
|
if(dedicated)
|
||||||
|
return;
|
||||||
|
|
||||||
|
NET_ThreadLock();
|
||||||
|
|
||||||
|
if (ipx_sockets[NS_CLIENT] == INV_SOCK)
|
||||||
|
{
|
||||||
|
port = ipx_clientport.value;
|
||||||
|
if (!port)
|
||||||
|
{
|
||||||
|
port = clientport.value;
|
||||||
|
if (!port)
|
||||||
|
port = -1;
|
||||||
}
|
}
|
||||||
NET_ThreadUnlock();
|
ipx_sockets[NS_CLIENT] = NET_IPXSocket(port);
|
||||||
|
|
||||||
|
if (ipx_sockets[NS_CLIENT] == INV_SOCK)
|
||||||
|
ipx_sockets[NS_CLIENT] = NET_IPXSocket(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NET_ThreadUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
@ -1878,9 +1835,9 @@ void NET_GetLocalAddress(void)
|
|||||||
#endif
|
#endif
|
||||||
namelen = sizeof(address);
|
namelen = sizeof(address);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (CRehldsPlatformHolder::get()->getsockname((SOCKET)ip_sockets[NS_SERVER], (struct sockaddr *)&address, (socklen_t *)&namelen) == SOCKET_ERROR)
|
if (CRehldsPlatformHolder::get()->getsockname(ip_sockets[NS_SERVER], (struct sockaddr *)&address, (socklen_t *)&namelen) == SOCKET_ERROR)
|
||||||
#else
|
#else
|
||||||
if (getsockname((SOCKET)ip_sockets[NS_SERVER], (struct sockaddr *)&address, (socklen_t *)&namelen) == SOCKET_ERROR)
|
if (getsockname(ip_sockets[NS_SERVER], (struct sockaddr *)&address, (socklen_t *)&namelen) == SOCKET_ERROR)
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
{
|
{
|
||||||
noip = TRUE;
|
noip = TRUE;
|
||||||
@ -1916,6 +1873,10 @@ void NET_GetLocalAddress(void)
|
|||||||
{
|
{
|
||||||
noipx = TRUE;
|
noipx = TRUE;
|
||||||
net_error = NET_GetLastError();
|
net_error = NET_GetLastError();
|
||||||
|
|
||||||
|
#ifdef REHLDS_FIXES
|
||||||
|
Con_Printf("Could not get IPX address, IPX disabled\nReason: %s\n", NET_ErrorString(net_error));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1933,7 +1894,6 @@ int NET_IsConfigured(void)
|
|||||||
|
|
||||||
void NET_Config(qboolean multiplayer)
|
void NET_Config(qboolean multiplayer)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
static qboolean old_config;
|
static qboolean old_config;
|
||||||
static qboolean bFirst = TRUE;
|
static qboolean bFirst = TRUE;
|
||||||
|
|
||||||
@ -1960,32 +1920,29 @@ void NET_Config(qboolean multiplayer)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef REHLDS_FIXES
|
|
||||||
const int invalid_socket = INVALID_SOCKET;
|
|
||||||
#else
|
|
||||||
const int invalid_socket = 0;
|
|
||||||
#endif // REHLDS_FIXES
|
|
||||||
NET_ThreadLock();
|
NET_ThreadLock();
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
if (ip_sockets[i] != invalid_socket)
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
CRehldsPlatformHolder::get()->closesocket(ip_sockets[i]);
|
|
||||||
#else
|
|
||||||
SOCKET_CLOSE(ip_sockets[i]);
|
|
||||||
#endif //_WIN32
|
|
||||||
ip_sockets[i] = invalid_socket;
|
|
||||||
}
|
|
||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
if (ipx_sockets[i] != invalid_socket)
|
for (int sock = 0; sock < 3; sock++)
|
||||||
|
{
|
||||||
|
if (ip_sockets[sock] != INV_SOCK)
|
||||||
{
|
{
|
||||||
CRehldsPlatformHolder::get()->closesocket(ipx_sockets[i]);
|
#ifdef _WIN32
|
||||||
ipx_sockets[i] = invalid_socket;
|
CRehldsPlatformHolder::get()->closesocket(ip_sockets[sock]);
|
||||||
|
#else //_WIN32
|
||||||
|
SOCKET_CLOSE(ip_sockets[sock]);
|
||||||
|
#endif //_WIN32
|
||||||
|
ip_sockets[sock] = INV_SOCK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (ipx_sockets[sock] != INV_SOCK)
|
||||||
|
{
|
||||||
|
CRehldsPlatformHolder::get()->closesocket(ipx_sockets[sock]);
|
||||||
|
ipx_sockets[sock] = INV_SOCK;
|
||||||
}
|
}
|
||||||
#endif //_WIN32
|
#endif //_WIN32
|
||||||
}
|
}
|
||||||
|
|
||||||
NET_ThreadUnlock();
|
NET_ThreadUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2129,7 +2086,7 @@ void NET_Shutdown(void)
|
|||||||
qboolean NET_JoinGroup(netsrc_t sock, netadr_t& addr)
|
qboolean NET_JoinGroup(netsrc_t sock, netadr_t& addr)
|
||||||
{
|
{
|
||||||
ip_mreq mreq;
|
ip_mreq mreq;
|
||||||
int net_socket = ip_sockets[sock];
|
SOCKET net_socket = ip_sockets[sock];
|
||||||
SIN_SET_ADDR(&mreq.imr_multiaddr, *(unsigned int*)&addr.ip[0]);
|
SIN_SET_ADDR(&mreq.imr_multiaddr, *(unsigned int*)&addr.ip[0]);
|
||||||
SIN_SET_ADDR(&mreq.imr_interface, 0);
|
SIN_SET_ADDR(&mreq.imr_interface, 0);
|
||||||
|
|
||||||
@ -2149,7 +2106,7 @@ qboolean NET_JoinGroup(netsrc_t sock, netadr_t& addr)
|
|||||||
qboolean NET_LeaveGroup(netsrc_t sock, netadr_t& addr)
|
qboolean NET_LeaveGroup(netsrc_t sock, netadr_t& addr)
|
||||||
{
|
{
|
||||||
ip_mreq mreq;
|
ip_mreq mreq;
|
||||||
int net_socket = ip_sockets[sock];
|
SOCKET net_socket = ip_sockets[sock];
|
||||||
SIN_SET_ADDR(&mreq.imr_multiaddr, *(unsigned int*)&addr.ip[0]);
|
SIN_SET_ADDR(&mreq.imr_multiaddr, *(unsigned int*)&addr.ip[0]);
|
||||||
SIN_SET_ADDR(&mreq.imr_interface, 0);
|
SIN_SET_ADDR(&mreq.imr_interface, 0);
|
||||||
|
|
||||||
|
@ -207,9 +207,9 @@ extern unsigned char net_message_buffer[NET_MAX_PAYLOAD];
|
|||||||
extern unsigned char in_message_buf[NET_MAX_PAYLOAD];
|
extern unsigned char in_message_buf[NET_MAX_PAYLOAD];
|
||||||
extern sizebuf_t in_message;
|
extern sizebuf_t in_message;
|
||||||
extern netadr_t in_from;
|
extern netadr_t in_from;
|
||||||
extern int ip_sockets[3];
|
extern SOCKET ip_sockets[3];
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
extern int ipx_sockets[3];
|
extern SOCKET ipx_sockets[3];
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
extern LONGPACKET gNetSplit;
|
extern LONGPACKET gNetSplit;
|
||||||
extern net_messages_t *messages[3];
|
extern net_messages_t *messages[3];
|
||||||
@ -253,12 +253,12 @@ void NET_FreeMsg(net_messages_t *pmsg);
|
|||||||
qboolean NET_GetPacket(netsrc_t sock);
|
qboolean NET_GetPacket(netsrc_t sock);
|
||||||
void NET_AllocateQueues(void);
|
void NET_AllocateQueues(void);
|
||||||
void NET_FlushQueues(void);
|
void NET_FlushQueues(void);
|
||||||
int NET_SendLong(netsrc_t sock, int s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen);
|
int NET_SendLong(netsrc_t sock, SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen);
|
||||||
void NET_SendPacket_api(unsigned int length, void *data, const netadr_t &to);
|
void NET_SendPacket_api(unsigned int length, void *data, const netadr_t &to);
|
||||||
void NET_SendPacket(netsrc_t sock, int length, void *data, const netadr_t& to);
|
void NET_SendPacket(netsrc_t sock, int length, void *data, const netadr_t& to);
|
||||||
int NET_IPSocket(char *net_interface, int port, qboolean multicast);
|
SOCKET NET_IPSocket(char *net_interface, int port, qboolean multicast);
|
||||||
void NET_OpenIP(void);
|
void NET_OpenIP(void);
|
||||||
int NET_IPXSocket(int hostshort);
|
SOCKET NET_IPXSocket(int hostshort);
|
||||||
void NET_OpenIPX(void);
|
void NET_OpenIPX(void);
|
||||||
void NET_GetLocalAddress(void);
|
void NET_GetLocalAddress(void);
|
||||||
int NET_IsConfigured(void);
|
int NET_IsConfigured(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user