Lors de l'exécution de STUN sur UDP, il est possible que le message STUN soit abandonné par le réseau. La fiabilité des transactions requête/réponse STUN est assurée par les retransmissions du message de requête par l'application cliente elle-même.
Un client doit retransmettre un message de requête STUN en commençant par un intervalle de RTO ("Retransmission TimeOut"), en doublant après chaque retransmission. Le RTO est une estimation du temps aller-retour.
Par défaut, le client STUN sgcWebSockets est déjà configuré avec un RTO de 500 ms et une valeur Max Retries de 7.
Par exemple, en supposant un RTO de 500 ms, les requêtes seraient envoyées aux moments 0 ms, 500 ms, 1500 ms, 3500 ms, 7500 ms, 15500 ms et 31500 ms. Si le client n'a pas reçu de réponse après 39500 ms, il considérera que la transaction a expiré.
oSTUN := TsgcSTUNClient.Create(nil);
oSTUN.Host := 'stun.sgcwebsockets.com';
oSTUN.Port := 3478;
oSTUN.RetransmissionOptions.Enabled := true;
oSTUN.RetransmissionOptions.RTO := 500;
oSTUN.RetransmissionOptions.MaxRetries := 7;
oSTUN.SendRequest;