From b82d369c1267780693e26afdc0f0fb25e4b1696a Mon Sep 17 00:00:00 2001 From: achemin1 Date: Fri, 22 Jan 2021 09:04:34 +0100 Subject: [PATCH] feat: we can now handle the arrival of new clients using a poll; cant handle the disconnects though --- server.c | 37 +++++++++++++++++++++++++++++++++++++ server.h | 2 ++ virtual_bridge.c | 2 +- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/server.c b/server.c index fedd808..5b278d0 100644 --- a/server.c +++ b/server.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "server.h" @@ -103,3 +104,39 @@ int serv_gestionClient(int s){ return 0; } + + +int boucleServeur2(int ecoute) +{ + //initialisation tableau de socket + //int dialogue; + struct pollfd descripteurs[1024]; + descripteurs[0].fd=ecoute; + //initialiser POLLIN + for (int i=0;i<1024;i++) + { + descripteurs[i].events=POLLIN; + } + int LongueurPoll = 1; + + while(1){ + + //poll + + + //if (ecoute est active){ + /* Attente d'une connexion */ + int dialogue=accept(ecoute,NULL,NULL); + if(dialogue<0) return -1; + + //if longueurPoll <1024 //TODO A GERER + descripteurs[LongueurPoll].fd = dialogue; + LongueurPoll ++; + printf("Nouveau LongueurPoll : %i\n", LongueurPoll); + + /* Passage de la socket de dialogue a la fonction de traitement */ + //if(traitement(dialogue)<0){ shutdown(ecoute,SHUT_RDWR); return 0;} + //} + } + +} diff --git a/server.h b/server.h index 882f113..9f67090 100644 --- a/server.h +++ b/server.h @@ -7,4 +7,6 @@ int boucleServeur(int ecoute,int (*traitement)(int)); int serv_printf(int s); int serv_gestionClient(int s); +int boucleServeur2(int ecoute); + #endif diff --git a/virtual_bridge.c b/virtual_bridge.c index cf1314f..5b28dd0 100644 --- a/virtual_bridge.c +++ b/virtual_bridge.c @@ -31,7 +31,7 @@ if(argc!=2){ // Initialisation du serveur int socket = initialisationServeur(service,1024);//1024 est la taille de la file dattente de listen // Traitement des connexions et des messages - int ret = boucleServeur(socket, serv_gestionClient); + int ret = boucleServeur2(socket); printf("Finish %i\n",ret); -- libgit2 0.21.2