+ }
+ timespec_subtract(&ttx, &t2, &t1);
+
+ switch (method) {
+ case READWRITE: {
+ if (!quiet) fprintf(stderr, "Receiving %d frames with read()\n", count);
+ clock_gettime(CLOCK_MONOTONIC, &t1);
+ for (i = 0; i < count; i++) {
+ //fprintf(stderr, "Receiving frame %d\r", i);
+ ret = read(sr, &cf, sizeof(cf));
+ if (ret != sizeof(cf)) {
+ perror("read");
+ exit(1);
+ }
+ }
+ clock_gettime(CLOCK_MONOTONIC, &t2);
+ //fprintf(stderr, "\n");
+ break;
+ }
+ case MMSG: {
+ if (!quiet) fprintf(stderr, "Receiving %d frames with recvmmsg()\n", count);
+ struct mmsghdr msgs[count];
+ struct iovec iovecs[count];
+ char bufs[count][sizeof(struct can_frame)];
+
+ memset(msgs, 0, sizeof(msgs));
+ for (i = 0; i < count; i++) {
+ iovecs[i].iov_base = bufs[i];
+ iovecs[i].iov_len = sizeof(struct can_frame);
+ msgs[i].msg_hdr.msg_iov = &iovecs[i];
+ msgs[i].msg_hdr.msg_iovlen = 1;
+ }