Estamos acostumbrados a poner la típica:
- If UserList(UserIndex).flags.Muerto = 1 Then
- Call WriteConsoleMsg(UserIndex, "¡¡Estás muerto!!", FONTTYPE_INFO)
- Exit Sub
- End If
Ahora, ¿cuál es el problema con esto?
Ninguno, dependiendo de qué paquete se trate. Si el paquete únicamente contiene bytes y variables númericas, no es necesario realizar una copia al buffer ni nada. Por eso, los paquetes que contengan esto:
- Call .incomingData.ReadByte
Y no hagan ninguna copia al buffer, no tiene problemas en utilizar Exit Sub. Pero la cosa cambia si utilizamos un paquete que contiene strings. Un paquete que contiene más de un dato y cadenas strings utiliza esto:
- Dim buffer As New clsByteQueue
- Call buffer.CopyBuffer(.incomingData)
Esto realiza una copia de los datos en el buffer, y por ende debe ser copiado al paquete original una vez que el paquete cumplió su función y llegó por completo al servidor-cliente:
- Call .incomingData.CopyBuffer(buffer)
Luego, el buffer auxiliar es destruido:
- Set buffer = Nothing
Por eso, si agregamos Exit Sub, no se destruye el buffer ni la copia vuelve al paquete original, y se puede generar un bucle infinito que termine por explotar el socket.




733

![Oraculo [1] Oraculo [1]](./images/ranks/Rango25.gif)
![Dragon Ancestral [1] Dragon Ancestral [1]](./images/ranks/Rango30.gif)
![Destructor de Mentes [4] Destructor de Mentes [4]](./images/ranks/Rango16.gif)



![Dragon Ancestral [3] Dragon Ancestral [3]](./images/ranks/Rango32.gif)

![Oraculo [2] Oraculo [2]](./images/ranks/Rango26.gif)


![Destructor de Mentes [6] Destructor de Mentes [6]](./images/ranks/Rango18.gif)
