KeepAlive Timer

When the KeepAlive timer expires without having been canceled, the computing system SHOULD send a KeepAlive message. A KeepAlive message is a reliable data frame (DFRAME) with no application payload. If both partners indicated a dwCurrentProtocolVersion value of 0x00010005 or higher, the DFRAME MUST have the PACKET_CONTROL_KEEPALIVE_OR_CORRELATE flag set and it MUST have the 32-bit dwSessID field present and set to the connection's game session ID. Otherwise, there MUST NOT be any payload.

After the reliable KeepAlive message begins transmitting, it MUST behave like all other reliable DFRAMEs with respect to time-outs and maximum retries. The implementation SHOULD reschedule the KeepAlive timer to expire again after another period of inactivity.