한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Libro blanco del lag en juegos › L8 Sockets y protocolos

Pérdida de los últimos datos por un cierre forzado con RST SO_LINGER, abrupt RST

ID de la causa sk-linger · Responsable principal Desarrollo de servidor (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

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

Síntomas
Desconexión
Factores
Pérdida de paquetes
A quién afecta
Solo yo
Cuándo
De vez en cuando, al azar
Responsable
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

  1. 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
  2. RFC 9293: Transmission Control Protocol (TCP) IETF
    Si se cierra quedando datos recibidos sin leer, se envía RST para avisar de la pérdida de datos
  3. Graceful Shutdown, Linger Options, and Socket Closure Microsoft
    Orden: cerrar primero solo el envío con shutdown y cerrar el socket después de recibir el aviso de cierre del otro extremo
  4. SNMP counter Linux 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

Ver también

Misma capa: L8 Sockets y protocolos

Causas de otras capas con el mismo síntoma (Desconexión)

Ver la ficha interactiva con gráficos y simulaciones