-gras_error_t gras_trp_sg_chunk_recv(gras_socket_t *sock,
- char *data,
- size_t size){
- gras_procdata_t *pd=gras_procdata_get();
+int gras_trp_sg_chunk_recv(gras_socket_t sock,
+ char *data,
+ unsigned long int size){
+ gras_trp_sg_sock_data_t *sock_data;
+ gras_trp_sg_sock_data_t *remote_sock_data;
+ gras_socket_t remote_socket= NULL;
+ gras_msg_t msg_got;
+ gras_msg_procdata_t msg_procdata =
+ (gras_msg_procdata_t)gras_libdata_by_name("gras_msg");
+ gras_trp_procdata_t trp_proc =
+ (gras_trp_procdata_t)gras_libdata_by_id(gras_trp_libdata_id);
+
+ xbt_assert0(sock->meas,
+ "SG chunk exchange shouldn't be used on non-measurement sockets");
+ xbt_queue_shift_timed(trp_proc->meas_selectable_sockets,
+ &remote_socket, 60);
+
+ if (remote_socket == NULL) {
+ THROW0(timeout_error,0,"Timeout");
+ }
+
+ remote_sock_data = (gras_trp_sg_sock_data_t *)remote_socket->data;
+ msg_got = xbt_fifo_shift(msg_procdata->msg_to_receive_queue_meas);
+
+ sock_data = (gras_trp_sg_sock_data_t *)sock->data;