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

Sách trắng lag game › L8 Socket và giao thức

Lỗi WSAECONNRESET trên socket UDP của Windows WSAECONNRESET on a Windows UDP socket

ID nguyên nhân sk-udp-connreset · Phụ trách chính Phát triển server (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Khi server Windows gửi UDP tới một client đã rời đi, thông báo “không tới được cổng” (ICMP) sẽ gửi về. Thông báo này khiến lời gọi nhận tiếp theo kết thúc bằng lỗi; nếu code server coi lỗi đó là bản thân socket bị hỏng, mọi người dùng socket đó đều bị ảnh hưởng.

Vì sao Server tiếp tục gửi UDP tới địa chỉ của client vừa thoát, và thông báo “không tới được cổng” (ICMP) gửi về → Dẫn đến Windows cho lời gọi nhận tiếp theo kết thúc bằng lỗi WSAECONNRESET (10054), và code server ngừng nhận hoặc đóng socket → Trên màn hình Mọi người chơi đang dùng socket đó cùng lúc bị đứng hình hoặc mất kết nối

Triệu chứng
Mất kết nối, Đứng hình
Yếu tố
Mất gói, Ngưng trệ
Ai gặp phải
Cả server
Khi nào
Thỉnh thoảng bất chợt, Ngay sau đăng nhập hoặc bảo trì
Phụ trách
Phụ trách chính Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Dùng WSAIoctl tắt SIO_UDP_CONNRESET để không nhận thông báo này; khi có lỗi nhận, chỉ ghi log rồi tiếp tục nhận.
Trên đồ thị
Rớt kết nối hàng loạt · Số kết nối, log lỗi nhận
Chỗ cần xem
Mã lỗi nhận UDP (WSAECONNRESET, 10054) và bản ghi vòng lặp nhận bị dừng hoặc socket bị đóng trong log server game; trong bản bắt gói (packet capture) phía server, xem ngay trước đó có ICMP Port Unreachable đến không
Đúng nếu
ngay trước khi kết nối rớt hàng loạt có ghi nhận lỗi nhận WSAECONNRESET, và trước đó có ICMP Port Unreachable gửi về từ địa chỉ của client vừa thoát
Loại trừ nếu
server chạy Linux, hoặc code đã tắt SIO_UDP_CONNRESET (không áp dụng)
Cách kiểm tra
Cần log và chỉ số của server, client game

Nguồn

  1. Winsock IOCTLs Microsoft
    SIO_UDP_CONNRESET bật hoặc tắt việc báo các thông báo “không tới được cổng” (PORT_UNREACHABLE) của UDP
  2. recvfrom function (winsock.h) Microsoft
    WSAECONNRESET trên socket UDP nghĩa là một lần gửi trước đó đã nhận về ICMP Port Unreachable
  3. Windows Sockets Error Codes Microsoft
    Mã lỗi WSAECONNRESET là 10054

Nguyên nhân nên xem cùng

Cùng tầng: L8 Socket và giao thức

Nguyên nhân ở tầng khác gây cùng triệu chứng (Mất kết nối)

Xem thẻ gốc có hình minh họa và thí nghiệm