Si el servidor corta una conexión de forma brusca, se pierden el último aviso o la confirmación de guardado que envió.
Por qué El servidor cierra la conexión con un cierre forzado (RST). Ocurre si SO_LINGER está en 0 segundos o si se cierra sin leer todos los datos recibidos → Efecto Se descartan el motivo de la expulsión y los últimos datos que aún se estaban enviando → En pantalla Mensajes de “Conexión cerrada por un error desconocido” sin motivo aparente
Responsable principal Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Tras enviar el motivo, cerrar primero solo el sentido de envío (shutdown), leer todos los datos recibidos hasta que el otro extremo cierre y entonces cerrar, evitar SO_LINGER a 0 segundos.
En el gráfico
Picos aleatorios · Conexiones terminadas con RST
Dónde mirar
Incremento de TcpExtTCPAbortOnData (cerrada con RST quedando datos por enviar, SO_LINGER a 0 segundos) y TcpExtTCPAbortOnClose (cerrada quedando datos sin leer) en nstat -az; en una captura de paquetes en el servidor en el momento del corte, si sale un RST donde debería salir un FIN
Se confirma si
A la hora de los reportes de “Conexión cerrada por un error desconocido”, el servidor envía RST y suben AbortOnData y AbortOnClose
Se descarta si
Si el servidor cerró normalmente con FIN y aun así no se ve el motivo, apunta al manejo del cierre en el cliente
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
Fuentes
closesocket function (winsock.h)Microsoft Con SO_LINGER activado y el tiempo en 0, el cierre se vuelve forzado: la conexión se reinicia al instante y se pierden los datos no enviados
SNMP counterLinux kernel TcpExtTCPAbortOnData: cerrada con RST quedando datos por enviar, por ejemplo con SO_LINGER a 0 segundos; TcpExtTCPAbortOnClose: cerrada quedando datos sin leer, con envío de RST