--- rpl/src/instructions_c4.c 2022/09/07 13:40:33 1.80 +++ rpl/src/instructions_c4.c 2024/10/28 14:56:58 1.86 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.34 - Copyright (C) 1989-2021 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.36 + Copyright (C) 1989-2024 Dr. BERTRAND Joël This file is part of RPL/2. @@ -664,6 +664,8 @@ instruction_close(struct_processus *s_et struct_objet *s_objet_argument; + unsigned char socket_en_ecoute; + (*s_etat_processus).erreur_execution = d_ex; if ((*s_etat_processus).affichage_arguments == 'Y') @@ -778,15 +780,6 @@ instruction_close(struct_processus *s_et * Fermeture du fichier */ - if (fclose((*descripteur).descripteur_c) != 0) - { - free(descripteur); - liberation(s_etat_processus, s_objet_argument); - - (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; - return; - } - if ((*descripteur).type != 'C') { if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite, @@ -828,6 +821,17 @@ instruction_close(struct_processus *s_et free(descripteur); } + else + { + if (fclose((*descripteur).descripteur_c) != 0) + { + free(descripteur); + liberation(s_etat_processus, s_objet_argument); + + (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; + return; + } + } if ((*((struct_fichier *) (*s_objet_argument).objet)).ouverture == 'S') { @@ -852,6 +856,7 @@ instruction_close(struct_processus *s_et socket = -1; socket_connectee = d_faux; + socket_en_ecoute = 'Y'; while(l_element_courant != NULL) { @@ -863,6 +868,8 @@ instruction_close(struct_processus *s_et (*(*l_element_courant).donnee).objet)).socket; socket_connectee = (*((struct_socket *) (*(*l_element_courant).donnee).objet)).socket_connectee; + socket_en_ecoute = (*((struct_socket *) + (*(*l_element_courant).donnee).objet)).socket_en_ecoute; if (l_element_precedent == NULL) { @@ -903,7 +910,10 @@ instruction_close(struct_processus *s_et if (socket_connectee == d_vrai) { - shutdown(socket, SHUT_RDWR); + if (socket_en_ecoute == 'N') + { + shutdown(socket, SHUT_RDWR); + } } if (close(socket) != 0)