2015-04-05 3 views
1

Je travaille sur la mise en œuvre de protocoles de transmission de données glissants pour un projet scolaire. Après l'envoi de chaque paquet de données sur une prise, un accusé de réception doit être reçu dans un certain délai. Si ce n'est pas le cas, le paquet devrait être renvoyé (c'est la partie qui irait dans la fonction de rappel), et son minuteur devrait être réinitialisé.Comment utiliser les "timers UNIX" C/C++ standard pour créer une série de gestionnaires de timeout de paquets pour les protocoles de transmission de données glissantes

Nous avons été encouragés à implémenter cette partie de l'algorithme en utilisant "Timers UNIX". Est-ce que "Timers UNIX" signifie timer_create(), setitimer(), alarm() ou aucun de ceux-là?

Si j'utilisais une fonction utilisant des gestionnaires de signaux comme fonctions de gestion du délai, le problème serait de dire au gestionnaire quel paquet renvoyer. Je pourrais garder une liste ordonnée et globale de paquets en attente d'accusé de réception, accessible depuis le gestionnaire de signal. Cependant, j'ai entendu dire que les gestionnaires de signaux peuvent être appelés pendant la modification d'une structure de données, la laissant dans un état corrompu. Quelle est la meilleure façon d'y aller?

Répondre

0

alarm() a une granularité de second niveau. Vous ne voulez pas l'utiliser. Recherchez l'appel select(). Vous pouvez l'utiliser sans descripteur de fichier pour une granularité de niveau beaucoup plus faible. Vous pouvez également l'utiliser pour attendre sur fd.