+}
+
+static int
+gras_trp_iov_recv(gras_socket_t sock, char *chunk, unsigned long int size)
+{
+ struct iovec elm;
+
+ XBT_DEBUG("Buffer one chunk to be received later");
+ elm.iov_base = (void *) chunk;
+ elm.iov_len = (size_t) size;
+ xbt_dynar_push(sock->bufdata->in_buf_v, &elm);
+
+ return size;
+}
+
+#endif
+/***************************************/
+/****[ end of VECTOR DATA EXCHANGE ]****/
+/***************************************/
+
+
+/***
+ *** Prototypes of BUFFERED
+ ***/
+
+void gras_trp_buf_socket_client(gras_trp_plugin_t self,
+ const char *host,
+ int port,
+ gras_socket_t sock);
+void gras_trp_buf_socket_server(gras_trp_plugin_t self,
+ int port,
+ gras_socket_t sock);
+gras_socket_t gras_trp_buf_socket_accept(gras_socket_t sock);
+
+void gras_trp_buf_socket_close(gras_socket_t sd);
+
+
+gras_socket_t gras_trp_buf_init_sock(gras_socket_t sock)
+{
+ gras_trp_bufdata_t *data = xbt_new(gras_trp_bufdata_t, 1);
+
+ data->buffsize = 100 * 1024; /* 100k */
+
+ data->in_buf.size = 0;
+ data->in_buf.data = xbt_malloc(data->buffsize);
+ data->in_buf.pos = 0; /* useless, indeed, since size==pos */
+
+ data->out_buf.size = 0;
+ data->out_buf.data = xbt_malloc(data->buffsize);
+ data->out_buf.pos = data->out_buf.size;
+
+#ifdef HAVE_READV
+ data->in_buf_v = data->out_buf_v = NULL;
+ data->in_buf_v = xbt_dynar_new(sizeof(struct iovec), NULL);
+ data->out_buf_v = xbt_dynar_new(sizeof(struct iovec), NULL);
+ data->out = buffering_iov;
+#else
+ data->out = buffering_buf;
+#endif
+
+ data->in = buffering_buf;
+
+ sock->bufdata = data;
+ return sock;
+}
+
+/***
+ *** Info about who's speaking
+ ***/
+static int gras_trp_tcp_my_port(gras_socket_t s) {
+ gras_trp_tcp_sock_data_t sockdata = s->data;
+ return sockdata->port;
+}
+static int gras_trp_tcp_peer_port(gras_socket_t s) {
+ gras_trp_tcp_sock_data_t sockdata = s->data;
+ return sockdata->peer_port;
+}
+static const char* gras_trp_tcp_peer_name(gras_socket_t s) {
+ gras_trp_tcp_sock_data_t sockdata = s->data;
+ return sockdata->peer_name;
+}
+static const char* gras_trp_tcp_peer_proc(gras_socket_t s) {
+ gras_trp_tcp_sock_data_t sockdata = s->data;
+ return sockdata->peer_proc;
+}
+static void gras_trp_tcp_peer_proc_set(gras_socket_t s,char *name) {
+ gras_trp_tcp_sock_data_t sockdata = s->data;
+ sockdata->peer_proc = xbt_strdup(name);
+}
+
+/***
+ *** Code
+ ***/
+void gras_trp_tcp_setup(gras_trp_plugin_t plug)
+{