Using the XPlatCpp SDK, attempts to QoS probe never complete if a packet is dropped.
The code here:
https://github.com/PlayFab/XPlatCppSdk/blob/master/code/source/playfab/QoS/XPlatSocket.cpp#L85
// Input timeout is in milliseconds // tv_usec takes microseconds, hence convert the input milliseconds to microseconds timeOutVal.tv_usec = timeoutMs * 1000;
Initialises the tv_usec field but never the tv_sec field.
Because the new() operator doesn't zero initialise memory, it is possible for the tv_sec field to contain an unspecified value which causes the select() call here:
https://github.com/PlayFab/XPlatCppSdk/blob/master/code/source/playfab/QoS/XPlatSocket.cpp#L170
to hang for an extremely long time.