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

Libro blanco del lag en juegos › L8 Sockets y protocolos

Error WSAECONNRESET en sockets UDP de Windows WSAECONNRESET on a Windows UDP socket

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

Abrir la ficha interactiva con gráficos y simulaciones →

Cuando un servidor Windows envía UDP a un cliente que ya se fue, vuelve un aviso de “puerto inalcanzable” (ICMP). Ese aviso hace que la siguiente llamada de recepción termine con error, y si el código del servidor lo trata como una avería del propio socket, todos los que usan ese socket se ven afectados.

Por qué Se sigue enviando UDP a la dirección de un cliente que acaba de irse y vuelve un aviso de “puerto inalcanzable” (ICMP) → Efecto Windows termina la siguiente llamada de recepción con el error WSAECONNRESET (10054), y el código del servidor deja de recibir o cierra el socket → En pantalla Congelamiento o desconexión simultánea de todos los que usaban ese socket

Síntomas
Desconexión, Congelamiento
Factores
Pérdida de paquetes, Detención
A quién afecta
Todo el servidor
Cuándo
De vez en cuando, al azar, Al conectar o tras un mantenimiento
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Desactivar SIO_UDP_CONNRESET con WSAIoctl para no recibir este aviso, ante un error de recepción solo registrarlo en el log y seguir recibiendo.
En el gráfico
Desconexión masiva · Número de conexiones, log de errores de recepción
Dónde mirar
En los logs del servidor del juego, códigos de error de recepción UDP (WSAECONNRESET, 10054) y registros de que el bucle de recepción se detuvo o se cerró el socket; en una captura de paquetes en el servidor, si justo antes llegó un ICMP Port Unreachable
Se confirma si
Justo antes de la desconexión masiva se registra un error de recepción WSAECONNRESET y, antes de eso, llega un ICMP Port Unreachable desde la dirección de un cliente que acababa de irse
Se descarta si
No aplica si el servidor es Linux o si el código desactiva SIO_UDP_CONNRESET
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego

Fuentes

  1. Winsock IOCTLs Microsoft
    SIO_UDP_CONNRESET activa y desactiva el aviso UDP de “puerto inalcanzable” (PORT_UNREACHABLE)
  2. recvfrom function (winsock.h) Microsoft
    En un socket UDP, WSAECONNRESET significa que un envío anterior recibió un ICMP Port Unreachable
  3. Windows Sockets Error Codes Microsoft
    Número de error de WSAECONNRESET: 10054

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