--- /dev/null
+sendto(0, "zyxwvutsrqponmlkjihgfedcba", 26, MSG_DONTROUTE, NULL, 0) = 26
+ | 00000 7a 79 78 77 76 75 74 73 72 71 70 6f 6e 6d 6c 6b zyxwvutsrqponmlk |
+ | 00010 6a 69 68 67 66 65 64 63 62 61 jihgfedcba |
+recvfrom(0, "abcdefghijklmnopqrstuvwxyz", 26, MSG_WAITALL, NULL, NULL) = 26
+ | 00000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 abcdefghijklmnop |
+ | 00010 71 72 73 74 75 76 77 78 79 7a qrstuvwxyz |
++++ exited with 0 +++
--- /dev/null
+#!/bin/sh
+
+# Check how dumpio works.
+
+. "${srcdir=.}/init.sh"
+
+dumpio_expected="${srcdir=.}/dumpio.expected"
+cat "$dumpio_expected" > /dev/null ||
+ fail_ "$dumpio_expected is not available"
+
+check_prog diff
+
+args='./unix-pair-send-recv abcdefghijklmnopqrstuvwxyz'
+$args ||
+ fail_ "$args failed"
+
+args="-esignal=none -esendto,recvfrom -eread=0 -ewrite=0 $args"
+$STRACE -o "$LOG" $args || {
+ cat "$LOG"
+ fail_ "$STRACE $args failed"
+}
+
+diff "$dumpio_expected" "$LOG" ||
+ fail_ "$STRACE $args failed to dump i/o properly"
+
+exit 0
--- /dev/null
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+
+static void
+transpose(char *str, int len)
+{
+ int i;
+
+ for (i = 0; i < len / 2; ++i) {
+ char c = str[i];
+ str[i] = str[len - 1 - i];
+ str[len - 1 - i] = c;
+ }
+}
+
+int
+main(int ac, char **av)
+{
+ assert(ac == 2);
+ const int len = strlen(av[1]);
+ assert(len);
+
+ (void) close(0);
+ (void) close(1);
+
+ int sv[2];
+ assert(socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == 0);
+ assert(sv[0] == 0);
+ assert(sv[1] == 1);
+
+ pid_t pid = fork();
+ assert(pid >= 0);
+
+ if (pid) {
+ assert(close(1) == 0);
+ transpose(av[1], len);
+ assert(sendto(0, av[1], len, MSG_DONTROUTE, NULL, 0) == len);
+ assert(recvfrom(0, av[1], len, MSG_WAITALL, NULL, NULL) == len);
+ assert(close(0) == 0);
+
+ int status;
+ assert(waitpid(pid, &status, 0) == pid);
+ assert(status == 0);
+ } else {
+ assert(close(0) == 0);
+ assert(recvfrom(1, av[1], len, MSG_WAITALL, NULL, NULL) == len);
+ transpose(av[1], len);
+ assert(sendto(1, av[1], len, MSG_DONTROUTE, NULL, 0) == len);
+ assert(recvfrom(1, av[1], len, MSG_WAITALL, NULL, NULL) == 0);
+ assert(close(1) == 0);
+ }
+
+ return 0;
+}