This is an example of how to use the client.
#include "os_base.h"
#include <signal.h>
static int alarm_notice;
#define ONE_MEG 1048576
#define MAX_MSG_SIZE ONE_MEG
static char data[ONE_MEG];
struct my_req {
        char message[256];
};
struct my_res {
        char message[256];
};
static void sigalrm_handler (int num)
{
        alarm_notice = 1;
}
static void
{
        struct iovec iov[2];
        ssize_t res;
        int write_count = 0;
        float secs;
        alarm_notice = 0;
        hdr.size = write_size;
        iov[0].iov_base = &hdr;
        iov[1].iov_base = data;
        alarm (10);
        do {
                if (res == write_size) {
                        write_count++;
                }
        } while (alarm_notice == 0 && (res == write_size || res == -EAGAIN));
        if (res < 0) {
                perror("qb_ipcc_sendv");
        }
        printf ("%5d messages sent ", write_count);
        printf ("%5d bytes per write ", write_size);
        printf ("%7.3f Seconds runtime ", secs);
        printf ("%9.3f TP/s ",
                ((float)write_count) / secs);
        printf ("%7.3f MB/s.\n",
                ((float)write_count) * ((float)write_size) / secs);
}
static void
{
        ssize_t size = 64;
        int i;
        signal (SIGALRM, sigalrm_handler);
        for (i = 0; i < 10; i++) { 
                _benchmark (conn, size);
                signal (SIGALRM, sigalrm_handler);
                size *= 5;
                if (size >= (ONE_MEG - 100)) {
                        break;
                }
        }
}
static void
{
        struct my_req req;
        struct my_res res;
        char *newline;
        int32_t rc;
        int32_t send_ten_events;
        while (1) {
                printf("SEND (q or Q to quit) : ");
                if (fgets(req.message, 256, stdin) == NULL) {
                        continue;
                }
                newline = strrchr(req.message, '\n');
                if (newline) {
                        *newline = '\0';
                }
                if (strcasecmp(req.message, "q") == 0) {
                        break;
                } else {
                        req.hdr.size = sizeof(struct my_req);
                        if (rc < 0) {
                                perror("qb_ipcc_send");
                                exit(0);
                        }
                }
                send_ten_events = (strcasecmp(req.message, "events") == 0);
                if (rc > 0) {
                        if (use_events && !send_ten_events) {
                                printf("waiting for event recv\n");
                        } else {
                                printf("waiting for recv\n");
                        }
                        printf("recv %d\n", rc);
                        if (rc < 0) {
                                perror("qb_ipcc_recv");
                                exit(0);
                        }
                        if (send_ten_events) {
                                int32_t i;
                                printf("waiting for 10 events\n");
                                for (i = 0; i < 10; i++) {
                                        if (rc < 0) {
                                                perror("qb_ipcc_event_recv");
                                        } else {
                                                printf("got event %d rc:%d\n", i, rc);
                                        }
                                }
                        }
                        printf("Response[%d]: %s \n", res.hdr.id, res.message);
                }
        }
}
static void
show_usage(const char *name)
{
        printf("usage: \n");
        printf("%s <options>\n", name);
        printf("\n");
        printf("  options:\n");
        printf("\n");
        printf("  -h             show this help text\n");
        printf("  -b             benchmark\n");
        printf("  -e             use events instead of responses\n");
        printf("\n");
}
int
main(int argc, char *argv[])
{
        const char *options = "eb";
        int32_t opt;
        while ((opt = getopt(argc, argv, options)) != -1) {
                switch (opt) {
                case 'b':
                        break;
                case 'e':
                        break;
                case 'h':
                default:
                        show_usage(argv[0]);
                        exit(0);
                        break;
                }
        }
        if (conn == NULL) {
                perror("qb_ipcc_connect");
                exit(1);
        }
        if (do_benchmark) {
                do_throughput_benchmark(conn);
        } else {
                do_echo(conn);
        }
        return EXIT_SUCCESS;
}