+ if (pr)
+ THROW2(mismatch_error, 0,
+ "can't listen on address %s:%d: port already in use.",
+ SIMIX_host_self_get_name(), port);
+
+ /* This port is free, let's take it */
+ pr = xbt_new(s_gras_sg_portrec_t, 1);
+ pr->port = port;
+ pr->meas = sock->meas;
+ pr->server = SIMIX_process_self();
+ xbt_dynar_push(hd->ports, &pr);
+ pr->rdv = SIMIX_req_rdv_create(NULL);
+
+ /* Create the socket */
+ data = xbt_new0(s_gras_trp_sg_sock_data_t, 1);
+ data->server = SIMIX_process_self();
+ data->server_port = port;
+ data->client = NULL;
+ data->rdv_server = pr->rdv;
+ data->rdv_client = NULL;
+ data->comm_recv = SIMIX_req_comm_irecv(pr->rdv, &data->msg, NULL, NULL, NULL);