Bom, nesse caso, não tem nada a ver com SYN attack.
O caso de buffer full, até ok. Não é necessário você fechar a conexão com o usuário, na verdade, você pode só descartar ou ver o que quer fazer.
Até pode acontecer numa situação saudavel de um lag, a depender do tamanho do buffer.
Além disso, chamar diretamente o closesocket do windows não é bem ideal. Deveria chamar a função CloseUser da própria TM, fazendo com que o player de fato fosse desconectado, removido do jogo e etc. Como eu disse, pode sim acontecer numa situação saudavel (apesar de dificil), e isso geraria outros danos.
Acredito que simplesmente `return FALSE` seja o mais correto, veja na w2pp
Os dois = 0 resetariam os buffers e seria possível receber pacotes deste socket novamente (o log em si parece estar errado, o closeuser deve ter sido removido, não sei).
if(pUser[User].cSock.Receive() != 1)
{
char temp[256];
sprintf(temp, "clo, server receive %d", User);
Log(temp, "-system", 0);
Log(temp, "-system", 0);
Log(temp, "-system", 0);
pUser[User].cSock.nRecvPosition = 0;
pUser[User].cSock.nProcPosition = 0;
break;
}