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
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
Winsock IOCTLsMicrosoft 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
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