Mis à jour le 7 mars 2006
TD 6
1 Questions de cours
É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
».
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 pas être modifiables (mais seulement
consultables). On devra donc ignorer une erreur éventuelle lors de
l'affectation de ces options.
É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
.
É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.
This document was translated from LATEX by
HEVEA and HACHA.