:: Enseignements :: Licence :: L3 :: 2016-2017 :: Programmation système en C ::
[LOGO]

socket() connect() bind() listen() accept()


Exercice 1 - Préparatifs

Exercice 2 - Tricoter une socket

Créer une socket avec l'appel système du même nom, spécifier la famille d'adresse correspondant à Internet (AF_INET ou PF_INET), demander une socket en mode connecté (SOCK_STREAM), avec le protocole par défaut. Vérifier le résultat de l'appel système.

Exercice 3 - Une fenêtre sur le monde

Sur vos machines, une struct sockaddr_in a la forme suivante:
struct sockaddr_in{
    sa_family_t    sin_family;          /* famille d'adresse : AF_INET, ...*/
    in_port_t      sin_port;            /* No port.            */
    struct in_addr sin_addr;            /* Adresse internet    */
    unsigned char  sin_zero[sizeof (struct sockaddr) -   /* Remplissage */
                           sizeof (sa_family_t) -        /* jusqu'a     */
                           sizeof (in_port_t) -          /* la taille de*/
                           sizeof (struct in_addr)];	 /* sockaddr */			
};

struct in_addr{
    uint32_t   s_addr;
};
       
  • Afin de créer une socket en écoute, il faut remplir une struct sockaddr_in, de famille AF_INET. Écrire une fonction qui retourne une telle structure remplie avec un port donné en argument, au dessus de 1024 (les ports en dessous de 1024 sont réservés au root); attention, il faut utiliser htons pour mettre le numéro de port sous le bon format. Dans le champ adresse de la structure, on mettra INADDR_ANY qui signifie qu'on veut écouter sur toutes les interfaces de la machine.
  • Écrire une fonction qui étant donné un port, crée une socket, utilise la fonction précédente pour récupérer une struct sockaddr_in pour écouter sur ce port, relie la socket à l'adresse grâce à bind(), puis met la socket en écoute avec listen(). La fonction retournera la socket en écoute.
  • Mettre la socket ainsi créée en attente de connection avec accept. Cet appel est bloquant jusqu'à ce que quelqu'un se connecte sur le port spécifié; il retourne alors un descripteur sur une nouvelle socket qui permet de communiquer, l'ancienne socket restant en écoute. Écrire un programme qui écoute sur le port passé en argument, de sorte que lorsque l'on se connecte (avec la commande telnet par exemple), le message "Bonjour" s'affiche. Essayez de vous connecter au programme tournant sur la machine voisine.
  • Faire une communication très simple entre le telnet et le serveur. Par exemple le serveur demande d'entrer son nom, puis affiche bonjour, le_nom et déconnecte l'utilisateur. Puis le serveur attend une nouvelle connection (revenir dans la boucle accept()).

Exercice 4 - Connecter les gens

Exercice 5 - Un grand navigateur

Se connecter sur le port 80 à la machine igm.univ-mlv.fr, envoyer la requête "get http://igm.univ-mlv.fr/ens/ HTTP/1.0\n\n" et lire le résultat. Vous êtes prêt à écrire un navigateur...