Commit b82d369c1267780693e26afdc0f0fb25e4b1696a

Authored by achemin1
1 parent 8d4694b6

feat: we can now handle the arrival of new clients using a poll; cant handle the disconnects though

Showing 3 changed files with 40 additions and 1 deletions   Show diff stats
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 #include <sys/un.h> 7 #include <sys/un.h>
8 #include <netdb.h> 8 #include <netdb.h>
9 #include <netinet/tcp.h> 9 #include <netinet/tcp.h>
  10 +#include <poll.h>
10 #include "server.h" 11 #include "server.h"
11 12
12 13
@@ -103,3 +104,39 @@ int serv_gestionClient(int s){ @@ -103,3 +104,39 @@ int serv_gestionClient(int s){
103 return 0; 104 return 0;
104 } 105 }
105 106
  107 +
  108 +
  109 +int boucleServeur2(int ecoute)
  110 +{
  111 + //initialisation tableau de socket
  112 + //int dialogue;
  113 + struct pollfd descripteurs[1024];
  114 + descripteurs[0].fd=ecoute;
  115 + //initialiser POLLIN
  116 + for (int i=0;i<1024;i++)
  117 + {
  118 + descripteurs[i].events=POLLIN;
  119 + }
  120 + int LongueurPoll = 1;
  121 +
  122 + while(1){
  123 +
  124 + //poll
  125 +
  126 +
  127 + //if (ecoute est active){
  128 + /* Attente d'une connexion */
  129 + int dialogue=accept(ecoute,NULL,NULL);
  130 + if(dialogue<0) return -1;
  131 +
  132 + //if longueurPoll <1024 //TODO A GERER
  133 + descripteurs[LongueurPoll].fd = dialogue;
  134 + LongueurPoll ++;
  135 + printf("Nouveau LongueurPoll : %i\n", LongueurPoll);
  136 +
  137 + /* Passage de la socket de dialogue a la fonction de traitement */
  138 + //if(traitement(dialogue)<0){ shutdown(ecoute,SHUT_RDWR); return 0;}
  139 + //}
  140 + }
  141 +
  142 +}
@@ -7,4 +7,6 @@ int boucleServeur(int ecoute,int (*traitement)(int)); @@ -7,4 +7,6 @@ int boucleServeur(int ecoute,int (*traitement)(int));
7 int serv_printf(int s); 7 int serv_printf(int s);
8 int serv_gestionClient(int s); 8 int serv_gestionClient(int s);
9 9
  10 +int boucleServeur2(int ecoute);
  11 +
10 #endif 12 #endif
@@ -31,7 +31,7 @@ if(argc!=2){ @@ -31,7 +31,7 @@ if(argc!=2){
31 // Initialisation du serveur 31 // Initialisation du serveur
32 int socket = initialisationServeur(service,1024);//1024 est la taille de la file dattente de listen 32 int socket = initialisationServeur(service,1024);//1024 est la taille de la file dattente de listen
33 // Traitement des connexions et des messages 33 // Traitement des connexions et des messages
34 - int ret = boucleServeur(socket, serv_gestionClient); 34 + int ret = boucleServeur2(socket);
35 35
36 printf("Finish %i\n",ret); 36 printf("Finish %i\n",ret);
37 37