--- rpl/src/instructions_r4.c 2011/05/09 13:52:20 1.28.2.6 +++ rpl/src/instructions_r4.c 2011/04/11 12:10:10 1.29 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.24 + RPL/2 (R) version 4.1.0.prerelease.0 Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -903,6 +903,9 @@ instruction_read(struct_processus *s_eta (*s_etat_processus).erreur_execution = d_ex; + attente.tv_sec = 0; + attente.tv_nsec = GRANULARITE_us * 1000; + if ((*s_etat_processus).affichage_arguments == 'Y') { printf("\n READ "); @@ -2062,9 +2065,6 @@ instruction_read(struct_processus *s_eta } # endif - attente.tv_sec = 0; - attente.tv_nsec = GRANULARITE_us * 1000; - for(;;) { if ((*((struct_socket *) (*s_objet_argument_1).objet)) @@ -2097,7 +2097,6 @@ instruction_read(struct_processus *s_eta tampon_lecture, longueur_questure, MSG_PEEK | MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv6, &longueur_adresse); - # else if ((*s_etat_processus).langue == 'F') { @@ -2140,12 +2139,9 @@ instruction_read(struct_processus *s_eta if (longueur_effective < 0) { nanosleep(&attente, NULL); - INCR_GRANULARITE(attente.tv_nsec); scrutation_injection(s_etat_processus); } - // Une donnée a été reçue. - if (((*s_etat_processus).var_volatile_requete_arret == -1) || (longueur_effective >= 0)) { @@ -2357,7 +2353,7 @@ instruction_read(struct_processus *s_eta longueur_adresse = 0; recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, tampon_lecture, - longueur_effective, MSG_DONTWAIT, + position_finale, MSG_DONTWAIT, NULL, &longueur_adresse); (*s_objet_adresse).objet = NULL; @@ -2368,7 +2364,7 @@ instruction_read(struct_processus *s_eta longueur_adresse = sizeof(adresse_ipv4); recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, tampon_lecture, - longueur_effective, MSG_DONTWAIT, + position_finale, MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv4, &longueur_adresse); if (((*s_objet_adresse).objet = @@ -2448,7 +2444,7 @@ instruction_read(struct_processus *s_eta longueur_adresse = sizeof(adresse_ipv6); recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, tampon_lecture, - longueur_effective, MSG_DONTWAIT, + position_finale, MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv6, &longueur_adresse); if (((*s_objet_adresse).objet = @@ -2573,9 +2569,6 @@ instruction_read(struct_processus *s_eta } # endif - attente.tv_sec = 0; - attente.tv_nsec = GRANULARITE_us * 1000; - for(;;) { if ((*((struct_socket *) (*s_objet_argument_1).objet)) @@ -2650,7 +2643,6 @@ instruction_read(struct_processus *s_eta if (longueur_effective < 0) { nanosleep(&attente, NULL); - INCR_GRANULARITE(attente.tv_nsec); scrutation_injection(s_etat_processus); } @@ -2798,8 +2790,7 @@ instruction_read(struct_processus *s_eta /* * Les informations concernant la cible sont valides si - * la socket est non connectée et que les domaines sont - * INET ou INET6. + * la socket est non connectée et des domaines INET ou INET6. * Dans tous les autres cas, on renvoie une liste vide. */ @@ -2809,8 +2800,6 @@ instruction_read(struct_processus *s_eta (strcmp((*((struct_socket *) (*s_objet_argument_1).objet)) .type, "SEQUENTIAL DATAGRAM") == 0)) { - // POSITION_FINALE peut être utilisée sans être initialisée ! - // virer position_finale pour longueur_effective longueur_adresse = 0; recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, tampon_lecture,