Merge branch 'master' into colormap-overhaul
This commit is contained in:
commit
3da58f436c
68
src/i_tcp.c
68
src/i_tcp.c
|
@ -649,14 +649,29 @@ static boolean SOCK_CanGet(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
static void SOCK_Send(void)
|
static inline ssize_t SOCK_SendToAddr(SOCKET_TYPE socket, mysockaddr_t *sockaddr)
|
||||||
{
|
{
|
||||||
ssize_t c = ERRSOCKET;
|
|
||||||
socklen_t d4 = (socklen_t)sizeof(struct sockaddr_in);
|
socklen_t d4 = (socklen_t)sizeof(struct sockaddr_in);
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
socklen_t d6 = (socklen_t)sizeof(struct sockaddr_in6);
|
socklen_t d6 = (socklen_t)sizeof(struct sockaddr_in6);
|
||||||
#endif
|
#endif
|
||||||
socklen_t d, da = (socklen_t)sizeof(mysockaddr_t);
|
socklen_t d, da = (socklen_t)sizeof(mysockaddr_t);
|
||||||
|
|
||||||
|
switch (sockaddr->any.sa_family)
|
||||||
|
{
|
||||||
|
case AF_INET: d = d4; break;
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
case AF_INET6: d = d6; break;
|
||||||
|
#endif
|
||||||
|
default: d = da; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sendto(socket, (char *)&doomcom->data, doomcom->datalength, 0, &sockaddr->any, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SOCK_Send(void)
|
||||||
|
{
|
||||||
|
ssize_t c = ERRSOCKET;
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
|
|
||||||
if (!nodeconnected[doomcom->remotenode])
|
if (!nodeconnected[doomcom->remotenode])
|
||||||
|
@ -669,19 +684,7 @@ static void SOCK_Send(void)
|
||||||
for (j = 0; j < broadcastaddresses; j++)
|
for (j = 0; j < broadcastaddresses; j++)
|
||||||
{
|
{
|
||||||
if (myfamily[i] == broadcastaddress[j].any.sa_family)
|
if (myfamily[i] == broadcastaddress[j].any.sa_family)
|
||||||
{
|
SOCK_SendToAddr(mysockets[i], &broadcastaddress[j]);
|
||||||
if (broadcastaddress[i].any.sa_family == AF_INET)
|
|
||||||
d = d4;
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
else if (broadcastaddress[i].any.sa_family == AF_INET6)
|
|
||||||
d = d6;
|
|
||||||
#endif
|
|
||||||
else
|
|
||||||
d = da;
|
|
||||||
|
|
||||||
c = sendto(mysockets[i], (char *)&doomcom->data, doomcom->datalength, 0,
|
|
||||||
&broadcastaddress[j].any, d);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -691,35 +694,13 @@ static void SOCK_Send(void)
|
||||||
for (i = 0; i < mysocketses; i++)
|
for (i = 0; i < mysocketses; i++)
|
||||||
{
|
{
|
||||||
if (myfamily[i] == clientaddress[doomcom->remotenode].any.sa_family)
|
if (myfamily[i] == clientaddress[doomcom->remotenode].any.sa_family)
|
||||||
{
|
SOCK_SendToAddr(mysockets[i], &clientaddress[doomcom->remotenode]);
|
||||||
if (clientaddress[doomcom->remotenode].any.sa_family == AF_INET)
|
|
||||||
d = d4;
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
else if (clientaddress[doomcom->remotenode].any.sa_family == AF_INET6)
|
|
||||||
d = d6;
|
|
||||||
#endif
|
|
||||||
else
|
|
||||||
d = da;
|
|
||||||
|
|
||||||
sendto(mysockets[i], (char *)&doomcom->data, doomcom->datalength, 0,
|
|
||||||
&clientaddress[doomcom->remotenode].any, d);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (clientaddress[doomcom->remotenode].any.sa_family == AF_INET)
|
c = SOCK_SendToAddr(nodesocket[doomcom->remotenode], &clientaddress[doomcom->remotenode]);
|
||||||
d = d4;
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
else if (clientaddress[doomcom->remotenode].any.sa_family == AF_INET6)
|
|
||||||
d = d6;
|
|
||||||
#endif
|
|
||||||
else
|
|
||||||
d = da;
|
|
||||||
|
|
||||||
c = sendto(nodesocket[doomcom->remotenode], (char *)&doomcom->data, doomcom->datalength, 0,
|
|
||||||
&clientaddress[doomcom->remotenode].any, d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == ERRSOCKET && errno != ECONNREFUSED && errno != EWOULDBLOCK)
|
if (c == ERRSOCKET && errno != ECONNREFUSED && errno != EWOULDBLOCK)
|
||||||
|
@ -1007,7 +988,7 @@ static boolean UDP_Socket(void)
|
||||||
if (gaie == 0)
|
if (gaie == 0)
|
||||||
{
|
{
|
||||||
runp = ai;
|
runp = ai;
|
||||||
while (runp != NULL)
|
while (runp != NULL && s < MAXNETNODES+1)
|
||||||
{
|
{
|
||||||
memcpy(&clientaddress[s], runp->ai_addr, runp->ai_addrlen);
|
memcpy(&clientaddress[s], runp->ai_addr, runp->ai_addrlen);
|
||||||
s++;
|
s++;
|
||||||
|
@ -1022,12 +1003,15 @@ static boolean UDP_Socket(void)
|
||||||
clientaddress[s].ip4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); //GetLocalAddress(); // my own ip
|
clientaddress[s].ip4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); //GetLocalAddress(); // my own ip
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s = 0;
|
||||||
|
|
||||||
// setup broadcast adress to BROADCASTADDR entry
|
// setup broadcast adress to BROADCASTADDR entry
|
||||||
gaie = I_getaddrinfo("255.255.255.255", "0", &hints, &ai);
|
gaie = I_getaddrinfo("255.255.255.255", "0", &hints, &ai);
|
||||||
if (gaie == 0)
|
if (gaie == 0)
|
||||||
{
|
{
|
||||||
runp = ai;
|
runp = ai;
|
||||||
while (runp != NULL)
|
while (runp != NULL && s < MAXNETNODES+1)
|
||||||
{
|
{
|
||||||
memcpy(&broadcastaddress[s], runp->ai_addr, runp->ai_addrlen);
|
memcpy(&broadcastaddress[s], runp->ai_addr, runp->ai_addrlen);
|
||||||
s++;
|
s++;
|
||||||
|
@ -1050,7 +1034,7 @@ static boolean UDP_Socket(void)
|
||||||
if (gaie == 0)
|
if (gaie == 0)
|
||||||
{
|
{
|
||||||
runp = ai;
|
runp = ai;
|
||||||
while (runp != NULL)
|
while (runp != NULL && s < MAXNETNODES+1)
|
||||||
{
|
{
|
||||||
memcpy(&broadcastaddress[s], runp->ai_addr, runp->ai_addrlen);
|
memcpy(&broadcastaddress[s], runp->ai_addr, runp->ai_addrlen);
|
||||||
s++;
|
s++;
|
||||||
|
|
Loading…
Reference in New Issue