J'écris une application client pour communiquer avec un programme serveur via UDP. Le client effectue périodiquement des demandes de données et doit utiliser la réponse du serveur la plus récente. Le message de demande a un champ de compteur non signé de 16 bits qui est répercuté par le serveur afin que je puisse jumeler les demandes avec les réponses du serveur. Comme c'est le protocole UDP, je dois gérer le cas où les réponses du serveur arrivent en désordre (ou n'arrivent pas du tout). Naïvement, cela signifie se tenir au plus haut compteur de messages vu jusqu'ici et laisser tomber n'importe quel message entrant avec un nombre inférieur. Mais cela échouera dès que nous passerons à 65535 messages et que le compteur reviendra à zéro. Existe-t-il un bon moyen de détecter (avec une probabilité raisonnable) que, par exemple, le message 5 vient effectivement après le message 65 000?Quel est un bon moyen de détecter un wrap-around dans un compteur de messages de largeur fixe?
Le langage d'implémentation est C++.
Ajouté le C et les balises C pour obtenir de l'espérons un peu plus les yeux sur ce sujet. Je m'attends à ce que je puisse traduire une solution spécifique au C assez facilement. –