Commit b82d369c1267780693e26afdc0f0fb25e4b1696a
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
server.c
@@ -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 | +} |
server.h
@@ -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 |
virtual_bridge.c
@@ -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 |