Diff for /rpl/src/instructions_w1.c between versions 1.97 and 1.98

version 1.97, 2015/06/08 14:11:43 version 1.98, 2015/09/15 19:18:46
Line 3041  instruction_wfdata(struct_processus *s_e Line 3041  instruction_wfdata(struct_processus *s_e
 ================================================================================  ================================================================================
 */  */
   
   static inline logical1
   options_sockets(struct_processus *s_etat_processus, struct_socket *s_socket)
   {
       int                         drapeau;
   
       if (((*s_socket).options & (1 << d_BROADCAST)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_BROADCAST, &drapeau,
                   sizeof(drapeau)) != 0)
           {
               return(d_erreur);
           }
       }
   
       if (((*s_socket).options & (1 << d_DONT_ROUTE)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_DONTROUTE, &drapeau,
                   sizeof(drapeau)) != 0)
           {
               return(d_erreur);
           }
       }
   
       if (((*s_socket).options & (1 << d_KEEP_ALIVE)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_KEEPALIVE, &drapeau,
                   sizeof(drapeau)) != 0)
           {
               return(d_erreur);
           }
       }
   
       if (((*s_socket).options & (1 << d_PRIORITY)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_PRIORITY,
                   &((*s_socket).priorite), sizeof((*s_socket).priorite)) != 0)
           {
               return(d_erreur);
           }
       }
   
       // Les deux options suivantes ne peuvent être positionnées simultanément.
   
       if (((*s_socket).options & (1 << d_RECEIVE_BUFFER)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_RCVBUF,
                   &((*s_socket).buffer_reception),
                   sizeof((*s_socket).buffer_reception)) != 0)
           {
               return(d_erreur);
           }
       }
   
       if (((*s_socket).options & (1 << d_FORCE_RECEIVE_BUFFER)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_RCVBUFFORCE,
                   &((*s_socket).buffer_reception),
                   sizeof((*s_socket).buffer_reception)) != 0)
           {
               return(d_erreur);
           }
       }
   
       // Même remarque
   
       if (((*s_socket).options & (1 << d_SEND_BUFFER)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_SNDBUF,
                   &((*s_socket).buffer_emission),
                   sizeof((*s_socket).buffer_emission)) != 0)
           {
               return(d_erreur);
           }
       }
   
       if (((*s_socket).options & (1 << d_FORCE_SEND_BUFFER)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_SNDBUFFORCE,
                   &((*s_socket).buffer_emission),
                   sizeof((*s_socket).buffer_emission)) != 0)
           {
               return(d_erreur);
           }
       }
   
       if (((*s_socket).options & (1 << d_RECEIVING_TIMEOUT)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_RCVTIMEO,
                   &((*s_socket).timeout_emission),
                   sizeof((*s_socket).timeout_emission)) != 0)
           {
               return(d_erreur);
           }
       }
   
       if (((*s_socket).options & (1 << d_SENDING_TIMEOUT)) != 0)
       {
           if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_SNDTIMEO,
                   &((*s_socket).timeout_emission),
                   sizeof((*s_socket).timeout_emission)) != 0)
           {
               return(d_erreur);
           }
       }
   
       return(d_absence_erreur);;
   }
   
   
 void  void
 instruction_wfsock(struct_processus *s_etat_processus)  instruction_wfsock(struct_processus *s_etat_processus)
 {  {
Line 3226  instruction_wfsock(struct_processus *s_e Line 3335  instruction_wfsock(struct_processus *s_e
                 {                  {
                     drapeau = d_vrai;                      drapeau = d_vrai;
   
 #               ifndef SEMAPHORES_NOMMES  #                   ifndef SEMAPHORES_NOMMES
                         if (sem_post(&((*s_etat_processus).semaphore_fork))                          if (sem_post(&((*s_etat_processus).semaphore_fork))
                                 != 0)                                  != 0)
 #               else  #                   else
                         if (sem_post((*s_etat_processus).semaphore_fork) != 0)                          if (sem_post((*s_etat_processus).semaphore_fork) != 0)
 #               endif  #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 3246  instruction_wfsock(struct_processus *s_e Line 3355  instruction_wfsock(struct_processus *s_e
                         erreur = errno;                          erreur = errno;
   
 #                       ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                         while(sem_wait(&((*s_etat_processus)                              while(sem_wait(&((*s_etat_processus)
                                 .semaphore_fork)) != 0)                                      .semaphore_fork)) != 0)
 #                       else  #                       else
                         while(sem_wait((*s_etat_processus).semaphore_fork)                              while(sem_wait((*s_etat_processus).semaphore_fork)
                                 != 0)                                      != 0)
 #                       endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
Line 3284  instruction_wfsock(struct_processus *s_e Line 3393  instruction_wfsock(struct_processus *s_e
                     }                      }
                     else                      else
                     {                      {
 #                   ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                             while(sem_wait(&((*s_etat_processus)                              while(sem_wait(&((*s_etat_processus)
                                     .semaphore_fork)) != 0)                                      .semaphore_fork)) != 0)
 #                   else  #                       else
                             while(sem_wait((*s_etat_processus).semaphore_fork)                              while(sem_wait((*s_etat_processus).semaphore_fork)
                                     != 0)                                      != 0)
 #                   endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
                             {                              {
Line 3299  instruction_wfsock(struct_processus *s_e Line 3408  instruction_wfsock(struct_processus *s_e
                                 return;                                  return;
                             }                              }
                         }                          }
   
                           if (options_sockets(s_etat_processus,
                                   (*s_objet_resultat).objet) != d_absence_erreur)
                           {
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_parametre_fichier;
                               return;
                           }
                     }                      }
                 } while(drapeau == d_faux);                  } while(drapeau == d_faux);
   
Line 3329  instruction_wfsock(struct_processus *s_e Line 3449  instruction_wfsock(struct_processus *s_e
                 {                  {
                     drapeau = d_vrai;                      drapeau = d_vrai;
   
 #               ifndef SEMAPHORES_NOMMES  #                   ifndef SEMAPHORES_NOMMES
                         if (sem_post(&((*s_etat_processus).semaphore_fork))                          if (sem_post(&((*s_etat_processus).semaphore_fork))
                                 != 0)                                  != 0)
 #               else  #                   else
                         if (sem_post((*s_etat_processus).semaphore_fork) != 0)                          if (sem_post((*s_etat_processus).semaphore_fork) != 0)
 #               endif  #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 3347  instruction_wfsock(struct_processus *s_e Line 3467  instruction_wfsock(struct_processus *s_e
                     {                      {
                         erreur = errno;                          erreur = errno;
   
 #                   ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                             while(sem_wait(&((*s_etat_processus)                              while(sem_wait(&((*s_etat_processus)
                                     .semaphore_fork)) != 0)                                      .semaphore_fork)) != 0)
 #                   else  #                       else
                             while(sem_wait((*s_etat_processus).semaphore_fork)                              while(sem_wait((*s_etat_processus).semaphore_fork)
                                     != 0)                                      != 0)
 #                   endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
                             {                              {
Line 3386  instruction_wfsock(struct_processus *s_e Line 3506  instruction_wfsock(struct_processus *s_e
                     }                      }
                     else                      else
                     {                      {
 #                   ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                             while(sem_wait(&((*s_etat_processus)                              while(sem_wait(&((*s_etat_processus)
                                     .semaphore_fork)) != 0)                                      .semaphore_fork)) != 0)
 #                   else  #                       else
                             while(sem_wait((*s_etat_processus).semaphore_fork)                              while(sem_wait((*s_etat_processus).semaphore_fork)
                                     != 0)                                      != 0)
 #                   endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
                             {                              {
Line 3401  instruction_wfsock(struct_processus *s_e Line 3521  instruction_wfsock(struct_processus *s_e
                                 return;                                  return;
                             }                              }
                         }                          }
   
                           if (options_sockets(s_etat_processus,
                                   (*s_objet_resultat).objet) != d_absence_erreur)
                           {
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_parametre_fichier;
                               return;
                           }
                     }                      }
                 } while(drapeau == d_faux);                  } while(drapeau == d_faux);
   
Line 3451  instruction_wfsock(struct_processus *s_e Line 3582  instruction_wfsock(struct_processus *s_e
                 {                  {
                     drapeau = d_vrai;                      drapeau = d_vrai;
   
 #               ifndef SEMAPHORES_NOMMES  #                   ifndef SEMAPHORES_NOMMES
                         if (sem_post(&((*s_etat_processus).semaphore_fork))                          if (sem_post(&((*s_etat_processus).semaphore_fork))
                                 != 0)                                  != 0)
 #               else  #                   else
                         if (sem_post((*s_etat_processus).semaphore_fork) != 0)                          if (sem_post((*s_etat_processus).semaphore_fork) != 0)
 #               endif  #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 3469  instruction_wfsock(struct_processus *s_e Line 3600  instruction_wfsock(struct_processus *s_e
                     {                      {
                         erreur = errno;                          erreur = errno;
   
 #                   ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                             while(sem_wait(&((*s_etat_processus)                              while(sem_wait(&((*s_etat_processus)
                                     .semaphore_fork)) != 0)                                      .semaphore_fork)) != 0)
 #                   else  #                       else
                             while(sem_wait((*s_etat_processus).semaphore_fork)                              while(sem_wait((*s_etat_processus).semaphore_fork)
                                     != 0)                                      != 0)
 #                   endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
                             {                              {
Line 3508  instruction_wfsock(struct_processus *s_e Line 3639  instruction_wfsock(struct_processus *s_e
                     }                      }
                     else                      else
                     {                      {
 #                   ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                             while(sem_wait(&((*s_etat_processus)                              while(sem_wait(&((*s_etat_processus)
                                     .semaphore_fork)) != 0)                                      .semaphore_fork)) != 0)
 #                   else  #                       else
                             while(sem_wait((*s_etat_processus).semaphore_fork)                              while(sem_wait((*s_etat_processus).semaphore_fork)
                                     != 0)                                      != 0)
 #                   endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
                             {                              {
Line 3523  instruction_wfsock(struct_processus *s_e Line 3654  instruction_wfsock(struct_processus *s_e
                                 return;                                  return;
                             }                              }
                         }                          }
   
                           if (options_sockets(s_etat_processus,
                                   (*s_objet_resultat).objet) != d_absence_erreur)
                           {
                               liberation(s_etat_processus, s_objet_argument);
                               liberation(s_etat_processus, s_objet_resultat);
   
                               (*s_etat_processus).erreur_execution =
                                       d_ex_erreur_parametre_fichier;
                               return;
                           }
                     }                      }
                 } while(drapeau == d_faux);                  } while(drapeau == d_faux);
             }              }

Removed from v.1.97  
changed lines
  Added in v.1.98


CVSweb interface <joel.bertrand@systella.fr>