Bonjour,
Je suis entrain de développer sur un µControlleur un shell Telnet (coté serveur).
Je voudrais gérer le Ctrl+C pour arrêter une commande en cours.
Donc pendant qu'une commande tourne :
1- Je regarde si j'ai reçu de nouvelles données
2- Si c'est le cas je recherche le caractère Ctrl+C
3- Si je trouve le caractère, j’arrête la commande et je vide le buffer de réception TCP jusqu'au caractère Ctrl+C => donc tous les caractères qui sont avant le Ctrl+C sont ignorés
Cela pose deux problèmes :
- si le buffer de réception (400 caractères) est plein, on ne pourra pas détecter le caractère Ctrl+C. Ce n'est pas trop gênant, car pour que ça arrive il faudrait que l'utilisateur tape pleins de caractères sur son clavier avant d'appuyer sur Ctr+C => cas improbable.
- le serveur et le client telnet peuvent négocier à tout moment des valeurs de paramètres (ex: taille de l’écran) ou envoyer des commandes spéciales (ex: demande d'interruption, alarme, ...) => utilisation de caractères d’échappements (nommés IAC et ESC) suivit de une ou plusieurs valeurs.
Donc avec ma solution actuelle, je peux rater ces séquences car je vide dans le buffer de réception tous les caractères qui sont avant mon Ctrl+C
De plus, il se peut qu'il y ai dans ma séquence d’échappement la valeur de Ctr+C => ça sera donc interpréter par mon programme comme un Ctrl+C alors que ça ne le devrait pas.
Est-ce que vous voyez un moyen simple d'éviter le second problème ?
=> si j'ai mal expliqué mon problème, n'hésitez pas à me demander plus de renseignements
Remarque : il faut que mon système fonctionne si on copie/colle une série de commandes dans le client telnet
Merci d'avance,
Partager