Ping
Internal ping calculation
The client uses QueryPerformanceCounter to generate an arbitrary timestamp, which it converts roughly into milliseconds by dividing it by 10,000.
An IPC message is sent by the client which includes the timestamp encoded as a 32-bit integer value.
An IPC message is sent back by the server with the same timestamp.
The client generates a new timestamp, divides it by 10,000, and then computes the difference between them to get the RTT for the connection.
Pseudocode
void SendPingRequest() {
int64_t t;
PingRequest req;
QueryPerformanceCounter(&t);
req.timestamp = (int32_t)(t / 10000);
SendMessage(req);
}
int32_t HandlePingResponse(PingResponse resp) {
int64_t currT;
int32_t prevMs = resp.timestamp;
QueryPerformanceCounter(&currT);
int32_t currMs = (int32_t)(currT / 10000);
return currMs - prevMs;
}
Remarks
Last updated
Was this helpful?