Commit b58103fffad4be486b800d3b30bb6620e97de7e4
1 parent
19fd5674
feat : now detects and handle the disconnects oh clients
Showing
1 changed file
with
23 additions
and
4 deletions
Show diff stats
server.c
1 | +#define _GNU_SOURCE | |
1 | 2 | #include <sys/types.h> |
2 | 3 | #include <sys/socket.h> |
3 | 4 | #include <stdlib.h> |
... | ... | @@ -105,6 +106,16 @@ int serv_gestionClient(int s){ |
105 | 106 | } |
106 | 107 | |
107 | 108 | |
109 | +void removeSocket(struct pollfd descr[], int i, int length){ | |
110 | + for (int j=i;j<length-1;j++) | |
111 | + { | |
112 | + descr[j]=descr[j+1]; | |
113 | + | |
114 | + } | |
115 | + | |
116 | + | |
117 | +} | |
118 | + | |
108 | 119 | |
109 | 120 | int boucleServeur2(int ecoute) |
110 | 121 | { |
... | ... | @@ -115,14 +126,15 @@ int boucleServeur2(int ecoute) |
115 | 126 | //initialiser POLLIN |
116 | 127 | for (int i=0;i<1024;i++) |
117 | 128 | { |
118 | - descripteurs[i].events=POLLIN; | |
129 | + descripteurs[i].events=POLLIN|POLLRDHUP|POLLERR; | |
119 | 130 | } |
120 | 131 | int LongueurPoll = 1; |
121 | 132 | |
122 | 133 | while(1){ |
123 | 134 | |
135 | + | |
124 | 136 | //poll |
125 | - int nb = poll(descripteurs, 1024, -1); | |
137 | + int nb = poll(descripteurs, LongueurPoll, -1); | |
126 | 138 | |
127 | 139 | if(nb<0){ perror("main.poll"); exit(EXIT_FAILURE); } |
128 | 140 | |
... | ... | @@ -141,14 +153,21 @@ int boucleServeur2(int ecoute) |
141 | 153 | } |
142 | 154 | |
143 | 155 | for(int i = 0; i < LongueurPoll-1; i++){ |
144 | - if( (descripteurs[i+1].revents&POLLIN) !=0){ //A lire | |
156 | + if( (descripteurs[i+1].revents&POLLRDHUP) !=0){ | |
157 | + printf("|%i$ Deconnection\n", i+1); | |
158 | + | |
159 | + //FONCTION ENLEVER UN SOCKET | |
160 | + removeSocket(descripteurs,i+1,LongueurPoll ); | |
161 | + LongueurPoll --; | |
162 | + } | |
163 | + else if( (descripteurs[i+1].revents&POLLIN) !=0){ //A lire | |
145 | 164 | //printf("Gestion Client %i \n", i+1); |
165 | + | |
146 | 166 | FILE* f = fdopen(descripteurs[i+1].fd, "a+"); |
147 | 167 | |
148 | 168 | char ligne[MAX_LIGNE]; |
149 | 169 | fgets(ligne,MAX_LIGNE,f); |
150 | 170 | printf(">%i$ %s\n", i+1, ligne); |
151 | -sleep(1); | |
152 | 171 | |
153 | 172 | } |
154 | 173 | } | ... | ... |