 $Id: Readme,v 1.4 2007/04/10 09:34:30 marquet Exp $ 
------------------------------------------------------------

    mtcs -- Serveur de chat multithread


------------------------------
 Les fichiers
------------------------------------------------------------

mtcs -- mtcs server
    Point d'entre du programme
    coute sur le port de connexion
    Etablissement de la connection par le serveur pour chaque client
cnct -- connection
    Gestion d'une connection par un thread
tools.{c,h} -- tools
    outils divers
config.h
    configuration du programme

------------------------------
 Utilisation
------------------------------------------------------------

1- lancer le serveur 
    - depuis un terminal 
        % ./mtcs
	Server open on port 8012
	...
    
    - ventuelement en mode verbose
        % ./mtcs -v
        (2684396012) main(): serveur initialization
        (2684396012) open_socket(): --> entering
        (2684396012) open_socket(): socket creee
        (2684396012) open_socket(): binding effectue
        (2684396012) open_socket(): listen ok
        (2684396012) open_socket(): -- exiting
        Server open on port 8012
        (2684396012) main(): server loop
        (2684396012) create_cnct(): --> entering
    - bien reprer le numro du port de connexion au serveur (ici 8012)
    - identifier aussi le nom de la machine ! (localhost pour la
      machine locale peut suffire)

2- lancer un client
    - depuis un autre terminal
        % telnet localhost 8012
	Trying 127.0.0.1...
        Connected to localhost.
        Escape character is '^]'.
	mtcs : bienvenu
        foooooooooooooooo
        foooooooooooooooo
        FOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooo.............
        FOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooo.............
    - terminer par control-] puis quit
        ^]
	telnet> quit
	Connection closed.

3- lancer des clients
    - depuis un troisime terminal
    - avant d'avoir quitter le premier client 
        % telnet localhost 8012
	Trying 127.0.0.1...
	Connected to localhost.
	Escape character is '^]'.
    - on obtient pas le message d'invite tant que le serveur n'a pas
      termin avec le premier client...
    - terminer le premier client (^] ou kill)
    - le serveur prend en charge le deuxime client  

------------------------------
 Travail  faire
------------------------------------------------------------

1- prise en charge de multiples clients. 
    - prendre en charge l'appel de la fonction repeater() par un
      thread. 
    - garantir que les variables globales accdes par ce thread sont
      bien protges contre des accs concurrents par plusieurs
      threads. 

2- ajout de statistiques
    - fourniture d'une bibliothque de gestion de statistiques (stat.h
      et stat.c)
    - faire en sorte qu' la reception du signal SIGUSR1, le serveur  
      imprime des statistiques : 
        - nombre de clients
	- nombre de lignes reues
	- nombre de lignes envoyes
	- nombre maximal de client  un instant donn
	- nombre maximal de lignes reues d'un client
	- nombre maximal de lignes envoyes  un client
	- etc.
    - les accs  la structure de donnes gardant les informations de
      statistique doivent tre protgs

3- version robuste
    - identifier un scnario de prise de verrous par un thread client
      et par le traitant de signaux pouvant mener  une treinte
      fatale (deadlock)
    - corriger cette erreur par la fourniture d'une bibliothque de
      verrous rcursifs (rmtx.c et rmtx.h)

------------------------------------------------------------
eof
