Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
documentation improvement
[simgrid.git] / src / gras / Transport / transport_interface.h
index 202c9da..281a9c1 100644 (file)
 #define GRAS_TRP_INTERFACE_H
 
 #include "portable.h" /* sometimes needed for fd_set */
+#include "simix/simix.h"
+#include "xbt/queue.h"
+
+/***
+ *** Options
+ ***/
+extern int gras_opt_trp_nomoredata_on_close;
 
 /***
  *** Main user functions
  ***/
 /* stable if we know the storage will keep as is until the next trp_flush */
-void gras_trp_send(gras_socket_t sd, char *data, long int size, int stable);
-void gras_trp_recv(gras_socket_t sd, char *data, long int size);
-void gras_trp_flush(gras_socket_t sd);
+XBT_PUBLIC(void) gras_trp_send(gras_socket_t sd, char *data, long int size,
+                              int stable);
+XBT_PUBLIC(void) gras_trp_recv(gras_socket_t sd, char *data, long int size);
+XBT_PUBLIC(void) gras_trp_flush(gras_socket_t sd);
 
 /* Find which socket needs to be read next */
-gras_socket_t gras_trp_select(double timeout);
+XBT_PUBLIC(gras_socket_t) gras_trp_select(double timeout);
 
 /* Set the peer process name (used by messaging layer) */
-void gras_socket_peer_proc_set(gras_socket_t sock,char*peer_proc);
+XBT_PUBLIC(void) gras_socket_peer_proc_set(gras_socket_t sock,char*peer_proc);
 
 /***
  *** Plugin mechanism 
@@ -75,12 +83,14 @@ struct gras_trp_plugin_ {
 
   void *data; /* plugin-specific data */
  
-   /* exit is responsible for freeing data and telling the OS this plugin goes */
-   /* exit=NULL, data gets freed. (ie exit function needed only when data contains pointers) */
+   /* exit is responsible for freeing data and telling to the OS that 
+      this plugin is gone */
+   /* exit=NULL, data gets brutally free()d by the generic interface. 
+      (ie exit function needed only when data contains pointers) */
   void (*exit)(gras_trp_plugin_t);
 };
 
-gras_trp_plugin_t
+XBT_PUBLIC(gras_trp_plugin_t) 
 gras_trp_plugin_get_by_name(const char *name);
 
 /* Data of this module specific to each process
@@ -92,13 +102,19 @@ typedef struct {
   char        *name;
   unsigned int name_len;
 
+  int myport; /* Port on which I listen myself */
+   
   xbt_dynar_t sockets; /* all sockets known to this process */
-  fd_set *fdset;
 
   /* SG only elements. In RL, they are part of the OS ;) */
-  int chan;    /* Formated messages channel */
-  int measChan; /* Unformated echange channel for performance measurement*/
    
+  /* List of sockets ready to be select()ed */
+  xbt_queue_t msg_selectable_sockets; /* regular sockets  */
+  xbt_queue_t meas_selectable_sockets;/* measurement ones */
+
 } s_gras_trp_procdata_t,*gras_trp_procdata_t;
 
+/* Display the content of our socket set (debugging purpose) */
+XBT_PUBLIC(void) gras_trp_socketset_dump(const char *name);
+
 #endif /* GRAS_TRP_INTERFACE_H */