If two players try to connect from the same IP, the first player gets abruptly dropped when the second tries to connect. It looks like this on the server console:
NET_GetMessage: disconnected socket
SV_ReadClientMessage: NET_GetMessage failed
Client fraggle removed
fraggle2 entered the game
This is caused by this code in net_dgrm.c:
// it's somebody coming back in from a crash/disconnect // so close the old qsocket and let their retry get them back in NET_Close(s); return NULL;
To give extra context of the code: UDP_AddrCompare returns 1 if the IP address is the same but port doesn't match. This is why this code is executed.
Considering how common NAT is nowadays I think the assumption that same IP = same person is a bad assumption to make. Two people on the same home wifi can't connect to same server? Things aren't like in the 90s any more where it's one home machine with a dialup connection.
At the very least this code should check eg. s->lastMessageTime to see if there's been no packet received from that socket within a certain time, eg. 5 seconds.
Eric: does QSS has a workaround for this?