+#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)
+{
+
+ plug->my_port = gras_trp_tcp_my_port;
+ plug->peer_port = gras_trp_tcp_peer_port;
+ plug->peer_name = gras_trp_tcp_peer_name;
+ plug->peer_proc = gras_trp_tcp_peer_proc;
+ plug->peer_proc_set = gras_trp_tcp_peer_proc_set;
+
+
+ plug->socket_client = gras_trp_buf_socket_client;
+ plug->socket_server = gras_trp_buf_socket_server;
+ plug->socket_accept = gras_trp_buf_socket_accept;
+ plug->socket_close = gras_trp_buf_socket_close;
+
+#ifdef HAVE_READV
+ plug->send = gras_trp_iov_send;
+#else
+ plug->send = gras_trp_buf_send;
+#endif
+ plug->recv = gras_trp_buf_recv;
+
+ plug->raw_send = gras_trp_tcp_send;
+ plug->raw_recv = gras_trp_tcp_recv;
+
+ plug->flush = gras_trp_bufiov_flush;
+
+ plug->data = NULL;
+ plug->exit = NULL;