todo);
while (todo>0) {
gras_msg_wait(60 /* wait up to one minute */,
- gras_msgtype_by_name("data"),
+ "data",
&expeditor,
&data);
todo--;
int sender (int argc,char *argv[]) {
- int i; /* iterator */
+ unsigned int iter; /* iterator */
char *data; /* data exchanged */
int datasize; /* size of message */
- xbt_host_t h; /* iterator */
+ 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 hosts */
- xbt_dynar_t hosts = xbt_dynar_new(sizeof(xbt_host_t),&xbt_host_free_voidp);
+ /* xbt_dynar for peers */
+ xbt_dynar_t peers = xbt_dynar_new(sizeof(xbt_peer_t),&xbt_peer_free_voidp);
/* Init the GRAS infrastructure and declare my globals */
gras_init(&argc,argv);
/* Get the node location from argc/argv */
- for (i=1; i<argc-1; i++){
- xbt_host_t host = xbt_host_from_string(argv[i]);
- xbt_dynar_push(hosts,&host);
+ for (iter=1; iter<argc-1; iter++){
+ xbt_peer_t peer = xbt_peer_from_string(argv[iter]);
+ xbt_dynar_push(peers,&peer);
}
datasize=atoi(argv[argc-1]);
gras_msgtype_declare("data", gras_datadesc_by_name("string"));
- /* Wait for receivers to startup */
- gras_os_sleep(1);
-
- /* write 'em */
- xbt_dynar_foreach(hosts,i,h) {
-
- peer = gras_socket_client(h->name,h->port);
- gras_msg_send(peer,gras_msgtype_by_name("data"),&data);
- INFO2(" Sent Data from %s to %s",
- gras_os_myname(),h->name);
+ /* write to the receivers */
+ xbt_dynar_foreach(peers,iter,h) {
+ 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);
+ if (gras_if_SG()) {
+ INFO2(" Sent Data from %s to %s", gras_os_myname(),h->name);
+ } else {
+ INFO0(" Sent Data");
+ }
+
gras_socket_close(peer);
}
/* Free the allocated resources, and shut GRAS down */
- xbt_dynar_free(&hosts);
+ xbt_dynar_free(&peers);
gras_exit();
return 0;