Ping
Internal ping calculation
- 1.The client uses QueryPerformanceCounter to generate an arbitrary timestamp, which it converts roughly into milliseconds by dividing it by 10,000.
- 2.An IPC message is sent by the client which includes the timestamp encoded as a 32-bit integer value.
- 3.An IPC message is sent back by the server with the same timestamp.
- 4.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.
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;
}
Because the server copies the same timestamp into the response message as is in the request message, ping calculation can be done in a stateless manner with respect to the client.
Last modified 3mo ago