Mis à jour le 13 février 2006
TD 6

TD 6

Mardi 1er mars 2005


aaa aaa

1  Un client tcp

Écrire une commande mon_wget qui prend en argument un nom de machine <machine>, un numéro de port <port>, un chemin d'accès <path> et qui affiche, sur la sortie standard, le résultat de la requête HTTP vers l'url «http://<machine>:<port>/<path>». On rappelle que le format d'une requête HTTP/1.0 est «GET /<path> HTTP/1.0\r\n\r\n».

(corrigé)

2  Un serveur tcp

On désire écrire un serveur de mise en majuscule qui accepte une connexion TCP sur un port particulier p, lit les caractères reçus sur cette connexion et les renvoie après les avoir mis en majuscule, jusqu'à ce que la connexion soit fermée, puis se remet en attente de connexion.

Écrire une version itérative (qui n'accepte qu'un client à la fois) de votre serveur.

Écrire une version concurrente de votre serveur qui crée un processus pour traiter chaque requête reçue.

Pour tester vos serveurs vous pouvez utiliser telnet localhost p.

Pour permettre une réutilisation rapide du port TCP du serveur on utilisera setsockopt avec l'option SO_REUSEADDR.

Pour éviter les attentes trop longues, on utilisera setsockopt_float avec les options SO_SNDTIMEO et SO_RCVTIMEO avec une valeur de 10 secondes. Toutefois, il faut savoir que ces options peuvent, sur certaines implémentations, ne sont pas être modifiables (mais seulement consultables). On devra donc ignorer une erreur éventuelle lors de l'affectation de ces options.
(corrigé)

3  Un cat en tcp

Écrire une commande mon_netcat qui prend en argument un nom de machine m, un numéro de port p et qui se connecte sur le port p de la machine m, puis recopie tout ce qui est lu sur l'entrée standard sur la connexion et tout ce qui est lu sur la connexion sur sa sortie standard. La commande termine lorsque la connexion est fermée. Pour cet exercice, on utilisera un seul processus et la fonction Unix.select.

(corrigé)

4  Un multiplexeur de serveurs tcp

Écrire une fonction inetd qui prend en argument une liste de couples de la forme (<port>, <cmd_argv>) et qui attend les connexions TCP sur n'importe lequel des ports de la liste. À chaque connexion provenant de l'extérieur sur l'un de ces ports, la fonction accepte la connexion puis exécute, dans un nouveau processus, la commande qui lui est associée en redirigeant l'entrée standard, la sortie standard et la sortie d'erreur vers la connexion.

(corrigé)



Ce document a été traduit de LATEX par HEVEA