瀏覽代碼

Amélioration de la gestion des déconexion imprévue

Arthur Brandao 6 年之前
父節點
當前提交
10ce36daf0
共有 4 個文件被更改,包括 19 次插入2 次删除
  1. 8 0
      Serveur/bomberstudent_server.c
  2. 2 1
      Serveur/error.c
  3. 1 0
      Serveur/error.h
  4. 8 1
      Serveur/server_tcp.c

+ 8 - 0
Serveur/bomberstudent_server.c

@@ -13,6 +13,9 @@
 #include "bomberstudent_server.h"
 #include "bomberstudent_server.h"
 #include "error.h"
 #include "error.h"
 
 
+/* --- Extern --- */
+extern int serrno;
+
 /* --- Globale --- */
 /* --- Globale --- */
 arraylist get;
 arraylist get;
 arraylist post;
 arraylist post;
@@ -291,6 +294,11 @@ boolean send_client(int cliId, JsonEncoder* je){
     sprintf(msg, "%s\n", answer);
     sprintf(msg, "%s\n", answer);
     //Envoi la reponse
     //Envoi la reponse
     if(!cli->main->server_send(cli->main, msg)){
     if(!cli->main->server_send(cli->main, msg)){
+        //Si la conneion est coupée
+        if(serrno == SEABORT){
+            //On ferme le client
+            remove_client(cliId);
+        }
         adderror("Impossible de repondre à la requete du client");
         adderror("Impossible de repondre à la requete du client");
         free(answer);
         free(answer);
         free(msg);
         free(msg);

+ 2 - 1
Serveur/error.c

@@ -26,7 +26,8 @@ char* serrlib[] = {
     "Erreur lors de la reception des données",
     "Erreur lors de la reception des données",
     "Erreur lors de l'envoi des données",
     "Erreur lors de l'envoi des données",
     "Erreur lors de la fermeture de la socket",
     "Erreur lors de la fermeture de la socket",
-    "Erreur mauvais type de socket"
+    "Erreur mauvais type de socket",
+    "Erreur connexion interrompue"
 };
 };
 Error error;
 Error error;
 
 

+ 1 - 0
Serveur/error.h

@@ -32,6 +32,7 @@
 #define SESEND 5
 #define SESEND 5
 #define SECLOSE 6
 #define SECLOSE 6
 #define SETYPE 7
 #define SETYPE 7
+#define SEABORT 8
 
 
 /* --- Structure --- */
 /* --- Structure --- */
 typedef struct{
 typedef struct{

+ 8 - 1
Serveur/server_tcp.c

@@ -9,11 +9,13 @@
 #include <stdio.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <unistd.h>
 #include <string.h>
 #include <string.h>
+#include <errno.h>
 #include "error.h"
 #include "error.h"
 #include "server.h"
 #include "server.h"
 
 
 /* --- Extern --- */
 /* --- Extern --- */
 extern int serrno;
 extern int serrno;
+extern int errno;
 
 
 /* --- Fonctions privées --- */
 /* --- Fonctions privées --- */
 boolean server_bind_tcp(Server this, int port) {
 boolean server_bind_tcp(Server this, int port) {
@@ -74,7 +76,12 @@ boolean server_send_tcp(Server this, char* msg) {
     /* Envoi message */
     /* Envoi message */
     tmp = write(this->socket_client, msg, strlen(msg) * sizeof (char));
     tmp = write(this->socket_client, msg, strlen(msg) * sizeof (char));
     if (tmp == ERR) {
     if (tmp == ERR) {
-        serrno = SESEND;
+        //Si connexion coupé (et SIGPIPE)
+        if(errno == EPIPE){
+            serrno = SEABORT;
+        } else {
+            serrno = SESEND;
+        }    
         addperror("Impossible d'envoyer les données");
         addperror("Impossible d'envoyer les données");
         return false;
         return false;
     }
     }