-/** \brief Send a chunk of (random) data over a measurement socket
- *
- * @param peer measurement socket to use for the experiment
- * @param timeout timeout (in seconds)
- * @param msg_size size of each chunk sent over the socket (in bytes).
- * @param msg_amount how many of these packets you want to send.
- *
- * Calls to gras_socket_meas_send() and gras_socket_meas_recv() on
- * each side of the socket should be paired.
- *
- * The exchanged data is zeroed to make sure it's initialized, but
- * there is no way to control what is sent (ie, you cannot use these
- * functions to exchange data out of band).
- *
- * @warning: in SimGrid version 3.1 and previous, the numerical arguments
- * were the total amount of data to send and the msg_size. This
- * was changed for the fool wanting to send more than MAXINT
- * bytes in a fat pipe.
- */
-void gras_socket_meas_send(gras_socket_t peer,
- unsigned int timeout,
- unsigned long int msg_size,
- unsigned long int msg_amount) {
- char *chunk=NULL;
- unsigned long int sent_sofar;
-
- XBT_IN;
-
- if (gras_if_RL())
- chunk=xbt_malloc0(msg_size);
-
- xbt_assert0(peer->meas,"Asked to send measurement data on a regular socket");
- xbt_assert0(peer->outgoing,"Socket not suited for data send (was created with gras_socket_server(), not gras_socket_client())");
-
- for (sent_sofar=0; sent_sofar < msg_amount; sent_sofar++) {
- CDEBUG5(gras_trp_meas,"Sent %lu msgs of %lu (size of each: %ld) to %s:%d",
- sent_sofar,msg_amount,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
- (*peer->plugin->raw_send)(peer,chunk,msg_size);
- }
- CDEBUG5(gras_trp_meas,"Sent %lu msgs of %lu (size of each: %ld) to %s:%d",
- sent_sofar,msg_amount,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
-
- if (gras_if_RL())
- free(chunk);
-
- XBT_OUT;
-}
-
-/** \brief Receive a chunk of data over a measurement socket
- *
- * Calls to gras_socket_meas_send() and gras_socket_meas_recv() on
- * each side of the socket should be paired.
- *
- * @warning: in SimGrid version 3.1 and previous, the numerical arguments
- * were the total amount of data to send and the msg_size. This
- * was changed for the fool wanting to send more than MAXINT
- * bytes in a fat pipe.
- */
-void gras_socket_meas_recv(gras_socket_t peer,
- unsigned int timeout,
- unsigned long int msg_size,
- unsigned long int msg_amount){
-
- char *chunk=NULL;
- unsigned long int got_sofar;
-
- XBT_IN;
-
- if (gras_if_RL())
- chunk = xbt_malloc(msg_size);
-
- xbt_assert0(peer->meas,
- "Asked to receive measurement data on a regular socket");
- xbt_assert0(peer->incoming,"Socket not suited for data receive");
-
- for (got_sofar=0; got_sofar < msg_amount; got_sofar ++) {
- CDEBUG5(gras_trp_meas,"Recvd %ld msgs of %lu (size of each: %ld) from %s:%d",
- got_sofar,msg_amount,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
- (peer->plugin->raw_recv)(peer,chunk,msg_size);
- }
- CDEBUG5(gras_trp_meas,"Recvd %ld msgs of %lu (size of each: %ld) from %s:%d",
- got_sofar,msg_amount,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
-
- if (gras_if_RL())
- free(chunk);
- XBT_OUT;
-}
-
-/**
- * \brief Something similar to the good old accept system call.
- *
- * Make sure that there is someone speaking to the provided server socket.
- * In RL, it does an accept(2) and return the result as last argument.
- * In SG, as accepts are useless, it returns the provided argument as result.
- * You should thus test whether (peer != accepted) before closing both of them.
- *
- * You should only call this on measurement sockets. It is automatically
- * done for regular sockets, but you usually want more control about
- * what's going on with measurement sockets.
- */
-gras_socket_t gras_socket_meas_accept(gras_socket_t peer){
- gras_socket_t res;
-
- xbt_assert0(peer->meas,
- "No need to accept on non-measurement sockets (it's automatic)");
-
- if (!peer->accepting) {
- /* nothing to accept here (must be in SG) */
- /* BUG: FIXME: this is BAD! it makes tricky to free the accepted socket*/
- return peer;
- }
-
- res = (peer->plugin->socket_accept)(peer);
- res->meas = peer->meas;
- CDEBUG1(gras_trp_meas,"meas_accepted onto %d",res->sd);
-
- return res;
-}
-
-