mirror of
https://git.code.sf.net/p/quake/nuq
synced 2024-11-24 21:12:07 +00:00
fix the 0 byte udp packet DoS bug (for linux, anyway: mods from ProQuake
applied for windows, but I can't test). In, linux, the problem was caused by nuq checking to see if there were any bytes to be read and if there were 0 bytes, just carying on without reading anything. It seems that the 0 byte packet was blocking the queue and so a 0 byte recvfrom is needed to make sure it gets removed.
This commit is contained in:
parent
9a53a2d328
commit
c8483de74f
3 changed files with 6 additions and 2 deletions
|
@ -262,7 +262,7 @@ int MPATH_CheckNewConnections (void)
|
|||
if (net_acceptsocket == -1)
|
||||
return -1;
|
||||
|
||||
if (recvfrom (net_acceptsocket, buf, 4, MSG_PEEK, NULL, NULL) > 0)
|
||||
if (recvfrom (net_acceptsocket, buf, 4, MSG_PEEK, NULL, NULL) >= 0)
|
||||
return net_acceptsocket;
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -248,6 +248,9 @@ int UDP_Connect (int socket, struct qsockaddr *addr)
|
|||
int UDP_CheckNewConnections (void)
|
||||
{
|
||||
unsigned long available;
|
||||
struct sockaddr_in from;
|
||||
socklen_t fromlen;
|
||||
char buff[1];
|
||||
|
||||
if (net_acceptsocket == -1)
|
||||
return -1;
|
||||
|
@ -256,6 +259,7 @@ int UDP_CheckNewConnections (void)
|
|||
Sys_Error ("UDP: ioctlsocket (FIONREAD) failed\n");
|
||||
if (available)
|
||||
return net_acceptsocket;
|
||||
recvfrom (net_acceptsocket, buff, 0, 0, &from, &fromlen);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -393,7 +393,7 @@ int WINS_CheckNewConnections (void)
|
|||
if (net_acceptsocket == -1)
|
||||
return -1;
|
||||
|
||||
if (precvfrom (net_acceptsocket, buf, sizeof(buf), MSG_PEEK, NULL, NULL) > 0)
|
||||
if (precvfrom (net_acceptsocket, buf, sizeof(buf), MSG_PEEK, NULL, NULL) >= 0)
|
||||
{
|
||||
return net_acceptsocket;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue