Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix a vicious bug: TCP socket use a buffer and read operation get as much data as...
[simgrid.git] / src / gras / Transport / transport_private.h
index dae72ff..9b384ec 100644 (file)
@@ -14,7 +14,6 @@
 
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
-#include "xbt/error.h"
 #include "xbt/dynar.h"
 #include "xbt/dict.h"
 
@@ -24,8 +23,9 @@
 #include "gras/transport.h"  /* rest of module interface */
 
 #include "gras/Transport/transport_interface.h" /* semi-public API */
-#include "gras/Virtu/virtu_interface.h" /* socketset_get() */
+#include "gras/Virtu/virtu_interface.h" /* libdata management */
 
+extern int gras_trp_libdata_id; /* our libdata identifier */
 /**
  * s_gras_socket:
  * 
@@ -40,13 +40,19 @@ typedef struct s_gras_socket  {
   int outgoing :1; /* true if we can write on this sock */
   int accepting :1; /* true if master incoming sock in tcp */
   int meas :1; /* true if this is an experiment socket instead of messaging */
+  int recv_ok :1; /* true if it is valid to recv() on the socket (false if it is a file) */
+  int valid :1; /* false if a select returned that the peer quitted, forcing us to "close" the socket */
+  int moredata :1; /* TCP socket use a buffer and read operation get as much data as possible. 
+                     It is possible that several messages are received in one shoot, and select won't catch them afterward again.
+                     This boolean indicates that this is the case, so that we don't call select in that case. */
 
-  unsigned long int bufSize; /* what to say to the OS. field here to remember it when accepting */
+  unsigned long int buf_size; /* what to say to the OS. field here to remember it when accepting */
    
   int  sd; 
   int  port; /* port on this side */
   int  peer_port; /* port on the other side */
   char *peer_name; /* hostname of the other side */
+  char *peer_proc; /* process on the other side */
 
   void *data;    /* plugin specific data */
 
@@ -58,12 +64,12 @@ void gras_trp_socket_new(int incomming,
                         gras_socket_t *dst);
 
 /* The drivers */
-typedef xbt_error_t (*gras_trp_setup_t)(gras_trp_plugin_t dst);
+typedef void (*gras_trp_setup_t)(gras_trp_plugin_t dst);
 
-xbt_error_t gras_trp_tcp_setup(gras_trp_plugin_t plug);
-xbt_error_t gras_trp_file_setup(gras_trp_plugin_t plug);
-xbt_error_t gras_trp_sg_setup(gras_trp_plugin_t plug);
-xbt_error_t gras_trp_buf_setup(gras_trp_plugin_t plug);
+void gras_trp_tcp_setup(gras_trp_plugin_t plug);
+void gras_trp_iov_setup(gras_trp_plugin_t plug);
+void gras_trp_file_setup(gras_trp_plugin_t plug);
+void gras_trp_sg_setup(gras_trp_plugin_t plug);
 
 /*
 
@@ -83,16 +89,6 @@ xbt_error_t gras_trp_buf_setup(gras_trp_plugin_t plug);
 
 */
 
-void gras_trp_buf_init_sock(gras_socket_t sock);
-
-
-/* Data exchange over measurement sockets */ /* FIXME: KILLME */
-xbt_error_t gras_socket_meas_exchange(gras_socket_t peer,
-                                     int sender,
-                                     unsigned int timeout,
-                                     unsigned long int expSize,
-                                     unsigned long int msgSize);
-
-xbt_dynar_t gras_socketset_get(void); /* FIXME:KILLME */
+gras_socket_t gras_trp_buf_init_sock(gras_socket_t sock);
 
 #endif /* GRAS_TRP_PRIVATE_H */