Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
refactored smpi into multiple source files.
[simgrid.git] / examples / gras / all2all / all2all.c
index f2f2ba1..63015fb 100644 (file)
@@ -81,8 +81,9 @@ int sender (int argc,char *argv[]) {
   char *data; /* data exchanged */
   int datasize; /* size of message */
   xbt_peer_t h; /* iterator */
+  int connected = 0;
   
-  gras_socket_t peer;  /* socket to node */
+  gras_socket_t peer=NULL;  /* socket to node */
   
  
   /* xbt_dynar for peers */
@@ -109,16 +110,28 @@ int sender (int argc,char *argv[]) {
   gras_msgtype_declare("data", gras_datadesc_by_name("string"));
 
 
-  /* Wait for receivers to startup */
-  gras_os_sleep(1);
-
-  /* write 'em */
+  /* write to the receivers */
   xbt_dynar_foreach(peers,i,h) {
-     
-     peer = gras_socket_client(h->name,h->port);
+     connected = 0;
+     while (!connected) {
+       xbt_ex_t e;
+       TRY {
+          peer = gras_socket_client(h->name,h->port);
+          connected=1;
+       } CATCH(e) {
+          if (e.category != system_error /*in RL*/&& e.category != mismatch_error/*in SG*/)
+            RETHROW;
+          xbt_ex_free(e);
+          gras_os_sleep(0.01);
+       }
+     }
      gras_msg_send(peer,"data",&data);
-     INFO2("  Sent Data from %s to %s",
-          gras_os_myname(),h->name);
+     if (gras_if_SG()) {
+       INFO2("  Sent Data from %s to %s", gras_os_myname(),h->name);
+     } else {
+       INFO0("  Sent Data");
+     }     
+      
      gras_socket_close(peer);
   }