80 lines
2.1 KiB
C
80 lines
2.1 KiB
C
// #define _BSD_SOURCE
|
|
#define _DEFAULT_SOURCE
|
|
|
|
#include "../src/ipc.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/time.h>
|
|
|
|
#define SERVICE_NAME "pong"
|
|
#define SECURE_MALLOC(p, s, wat) p = malloc (s); if (p == NULL) { wat; }
|
|
#define DEFAULT_MSG "coucou"
|
|
|
|
|
|
int main(int argc, char * argv[])
|
|
{
|
|
SECURE_DECLARATION(struct ipc_ctx, ctx);
|
|
SECURE_DECLARATION(struct ipc_event, event);
|
|
|
|
SECURE_DECLARATION (struct ipc_message, write_m);
|
|
SECURE_DECLARATION (struct ipc_message, read_m);
|
|
|
|
// timing the exchange duration
|
|
struct timeval tval_before, tval_after, tval_result;
|
|
|
|
size_t nb_rounds = 1000;
|
|
char *message_str = NULL;
|
|
|
|
if (argc > 1 && strncmp(argv[1], "-h", 2) == 0) {
|
|
fprintf (stderr, "usage: %s [nb-rounds [message]]\n", argv[0]);
|
|
fprintf (stderr, "default: nb-rounds = 1000, message='coucou'\n");
|
|
exit(0);
|
|
}
|
|
|
|
if (argc > 1) {
|
|
nb_rounds = (size_t) atoi(argv[1]);
|
|
}
|
|
|
|
if (argc > 2) {
|
|
message_str = argv[2];
|
|
}
|
|
|
|
if (message_str == NULL) {
|
|
// message par defaut
|
|
SECURE_MALLOC (message_str, strlen(DEFAULT_MSG) +1, exit(EXIT_FAILURE));
|
|
memcpy(message_str, DEFAULT_MSG, strlen(DEFAULT_MSG));
|
|
}
|
|
|
|
TEST_IPC_Q (ipc_connection (&ctx, SERVICE_NAME, NULL), EXIT_FAILURE);
|
|
|
|
SECURE_MALLOC (write_m.payload, strlen(message_str), exit(EXIT_FAILURE));
|
|
memcpy (write_m.payload, message_str, strlen(message_str));
|
|
write_m.type = MSG_TYPE_DATA;
|
|
write_m.user_type = 42;
|
|
write_m.fd = ctx.pollfd[0].fd;
|
|
write_m.length = strlen(message_str);
|
|
|
|
gettimeofday(&tval_before, NULL);
|
|
for (size_t i = 0 ; i < nb_rounds ; i++) {
|
|
ipc_write_fd (ctx.pollfd[0].fd, &write_m);
|
|
|
|
// reading
|
|
TEST_IPC_Q(ipc_read (&ctx, 0 /* only valid index */, &read_m), EXIT_FAILURE);
|
|
// printf ("received message (%d bytes): %*s\n", read_m.length, read_m.length, read_m.payload);
|
|
// ipc_message_empty (&read_m);
|
|
|
|
}
|
|
gettimeofday(&tval_after, NULL);
|
|
|
|
timersub(&tval_after, &tval_before, &tval_result);
|
|
|
|
printf("Time elapsed: %ld.%06ld\n", (long int)tval_result.tv_sec, (long int)tval_result.tv_usec);
|
|
|
|
// disconnection
|
|
TEST_IPC_Q (ipc_close_all (&ctx), EXIT_FAILURE);
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|