El mensaje de desconexión *"Internal Exception: java.io.IOException: An existing connection was forcibly closed by the remote host"* es uno de los dolores de cabeza más habituales para jugadores y administradores.
A menudo se confunde con una caída del servidor, pero en el 90% de los casos se debe a una **desincronización en el flujo de paquetes de red** o a fragmentación en la capa de transporte TCP.
1. Causas principales del fallo
- **Tamaño del paquete superior al MTU (Maximum Transmission Unit):** Cuando un jugador entra a un servidor con muchos mods o entidades concentradas, el servidor envía un paquete inicial masivo. Si el router del usuario fragmenta el paquete y pierde fragmentos, la JVM aborta la conexión.
- **Mods cliente/servidor incompatibles:** El cliente envía un identificador de paquete que el servidor no reconoce, forzando un cierre inmediato del socket.
- **Firewalls y software antivirus invasivo:** Ciertos antivirus analizan el tráfico en tiempo real e interceptan los sockets de Java causando un time-out artificial.
2. Pasos para solucionarlo desde el lado del Jugador
- **Aumentar el tiempo de espera de red con mods:** Mods como **Connectivity** o **Packet Fixer** extienden el límite de tiempo que la JVM espera antes de declarar la desconexión.
- **Restablecer la pila TCP/IP de Windows:**
- ```bash
- netsh int ip reset
- ipconfig /flushdns
- ```
- **Utilizar DNS fiables:** Configurar los servidores DNS públicos de Cloudflare (1.1.1.1) o Google (8.8.8.8) para evitar resolución errónea de registros SRV del servidor.
3. Recomendaciones para el Administrador
- Configura un plugin o mod de compresión de red adecuado en `server.properties`: establece `network-compression-threshold=256` o `512`.
- Distribuye el cliente preconfigurado a través de ElysiumPad para garantizar que ningún jugador ingrese con versiones desfasadas de librerías de red.
