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

게임 렉 백서 › L8 소켓과 프로토콜

윈도우 UDP 소켓의 WSAECONNRESET 오류 WSAECONNRESET on a Windows UDP socket

원인 ID sk-udp-connreset · 주 담당 게임개발팀·서버 개발

그림과 실험이 있는 원본 카드로 열기 →

윈도우 서버가 이미 떠난 클라이언트에게 UDP를 보내면 “포트 없음”(ICMP) 알림이 돌아옵니다. 그 알림 때문에 다음 수신 호출이 오류로 끝나는데 서버 코드가 이 오류를 소켓 자체의 고장으로 처리하면 그 소켓을 쓰는 모두가 영향을 받습니다.

왜 막 나간 클라이언트의 주소로 계속 UDP를 보내 “포트 없음”(ICMP) 알림이 돌아옴 → 그러면 윈도우가 그다음 수신 호출을 WSAECONNRESET(10054) 오류로 끝내고, 서버 코드가 수신을 멈추거나 소켓을 닫음 → 화면에서는 그 소켓을 쓰던 모든 사람이 한꺼번에 멈춤·접속 끊김

증상
접속 끊김, 멈춤
요인
손실, 정체
누가 겪나
서버 전체
언제
가끔 무작위로, 접속·점검 직후
담당
주 담당 게임개발팀·서버 개발
게임개발팀 할 일
WSAIoctl로 SIO_UDP_CONNRESET을 꺼서 이 알림을 받지 않기, 수신 오류가 나도 로그만 남기고 수신을 계속하기.
그래프에서는
연결이 한꺼번에 끊김 · 접속 수, 수신 오류 로그
확인할 곳
게임 서버 로그에서 UDP 수신 오류 코드(WSAECONNRESET, 10054)와 수신 루프가 멈추거나 소켓을 닫은 기록을 찾고 서버 쪽 패킷 캡처로 직전에 ICMP Port Unreachable이 도착했는지 봄
이러면 맞음
접속이 한꺼번에 끊기기 직전에 WSAECONNRESET 수신 오류가 기록되고, 그 전에 막 나간 클라이언트 주소에서 ICMP Port Unreachable이 옴
이러면 아님
리눅스 서버이거나 코드가 SIO_UDP_CONNRESET을 끈 경우면 해당 없음
확인 수단
게임 서버·클라이언트의 로그·지표가 필요

출처

  1. Winsock IOCTLs Microsoft
    SIO_UDP_CONNRESET으로 UDP “포트 없음”(PORT_UNREACHABLE) 알림 보고를 켜고 끔
  2. recvfrom function (winsock.h) Microsoft
    UDP 소켓의 WSAECONNRESET은 이전 전송이 ICMP Port Unreachable을 받았다는 뜻
  3. Windows Sockets Error Codes Microsoft
    WSAECONNRESET 오류 번호 10054

함께 보면 좋은 원인

같은 층: L8 소켓과 프로토콜

같은 증상(접속 끊김)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기