Khi server cắt kết nối đột ngột, thông báo cuối cùng hoặc tín hiệu đã lưu xong mà server vừa gửi sẽ bị mất.
Vì sao Server đóng kết nối kiểu cưỡng bức (RST). Xảy ra khi đặt SO_LINGER là 0 giây, hoặc khi đóng socket trước khi đọc hết dữ liệu đã nhận → Dẫn đến Lý do kick và dữ liệu cuối cùng còn đang trên đường gửi bị vứt bỏ → Trên màn hình Thông báo “Kết nối bị đóng do lỗi không xác định” mà không rõ lý do
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)
Gửi lý do xong thì chỉ đóng chiều gửi trước (shutdown), đọc hết dữ liệu nhận được cho đến khi bên kia đóng rồi mới đóng socket, tránh SO_LINGER 0 giây.
Trên đồ thị
Thỉnh thoảng vọt lên bất chợt · Số kết nối kết thúc bằng RST
Chỗ cần xem
Mức tăng TcpExtTCPAbortOnData (đóng bằng RST khi vẫn còn dữ liệu cần gửi, SO_LINGER 0 giây) và TcpExtTCPAbortOnClose (đóng khi vẫn còn dữ liệu chưa đọc) trong nstat -az; trong bản bắt gói (packet capture) phía server lúc mất kết nối, xem có RST đi ra ở chỗ lẽ ra phải là FIN không
Đúng nếu
vào thời điểm người chơi báo “Kết nối bị đóng do lỗi không xác định”, server gửi RST, và AbortOnData, AbortOnClose tăng
Loại trừ nếu
server đã đóng bình thường bằng FIN mà vẫn không thấy lý do → xem phần xử lý đóng kết nối của client
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Nguồn
closesocket function (winsock.h)Microsoft Bật SO_LINGER và đặt thời gian là 0 thì lệnh đóng trở thành đóng cưỡng bức, reset kết nối ngay lập tức, dữ liệu chưa gửi bị mất
SNMP counterLinux kernel TcpExtTCPAbortOnData: đóng bằng RST khi vẫn còn dữ liệu cần gửi (do SO_LINGER 0 giây, v.v.); TcpExtTCPAbortOnClose: đóng khi vẫn còn dữ liệu chưa đọc nên gửi RST