#include #include #include #include #include #include #include /* port d'attache du serveur */ #define PORT_SERVEUR 45678 /* declaration de la fonction service() */ void service(int); int main(int argc, char *argv[]) { /********** Variables du serveur **********/ /* * Definir ici le file-descripteur de la socket d'ecoute du server */ /* * Definir ici le file-descripteur de la socket retournee par l'accept() */ /* * Definir ici la structure socket du serveur */ /* * Definir ici la structure socket du client garnie par l'accept() */ /* * Definir ici la longueur de la structure socket du client */ /********** Code du serveur **********/ /* * Ouvrir ici le point de communication de la socket du serveur */ /* * Garnir ici la structure de la socket du serveur * avec: * - sa famille * - sur (la/les)quelle(s) de ses adresses elle ecoute * - sur quel port elle ecoute */ /* * Attacher ici le file-descripteur de la socket a sa structure */ /* * Mettre en place le dispositif de file d'attente * des requetes d'etablissement de communications entrantes */ /* * Boucle generale du serveur (infinie) * Le serveur ne doit jamais s'arreter en principe (pas d'exit()). * Le serveur doit ici accepter les demandes d'etablissement * de connexions entrantes par un accept() (cf. man -s 3n accept) * * Une fois l'accept() realise, on peut appeler le service (fonction service) * qui utilisera sur le file-destripteur rendu par l'accept() * pour cela, et afin d'eviter que le traitement du service * gele la partie "etablissement de communication du serveur", * on creera un processus fils par un fork() qui communiquera * sur la socket heritee de l'accept(). Le processus parent * continuera alors a boucler sur l'accept() pour satisfaire * les eventuelles nouvelles demandes d'etablissement de connexion. * * Notes: * Ce fd herite peut etre place en variable globale vue des fonctions * mais peut etre aussi transmis a la fonction service() par * un argument, par ex. service(fd), ce qui est plus propre. * Une fois le service effectue, s'il est un processus fils * du serveur, il devra fermer sa socket et se terminer par un exit(), * mais jamais le serveur comme il est indique plus haut. * Par exemple, si un accept() echoue, ne jamais arreter le serveur, * il doit continuer a servir les nouvelles requetes. */ /* Creation d'un processus fils pour gerer la communication */ } /* * Fonction service */ void service(int fd) { /* Definir ici la variable rendue par read() */ /* Definir ici le buffer de lecture */ /* Definir ici le message d'accueil du serveur */ /* Envoi du message d'accueil au client */ /* Boucle de lecture des messages du client et des reponses du serveur */ } /*********** fin du code du serveur ************/