#include #include #include #include int main() { int fds[2]; int domain; domain = AF_UNIX; // domain = AF_INET; // works printf("Domain: %i\n", domain); int ret = socketpair(domain, SOCK_DGRAM, 0, fds); // try also: SOCK_STREAM if(ret) { perror("Could not get socketpair"); return 1; } /* struct timeval v = { .tv_sec = 1, .tv_usec = 0 }; ret = setsockopt(fds[0], SOL_SOCKET, SO_RCVTIMEO, &v, sizeof(v)); if(ret) { perror("setsockopt"); } */ size_t bufLen = 1024; char *buf = calloc(bufLen, 1); int ok = 0; while(true) { printf("recv %i\n", ok); ret = recv(fds[0], &buf[0], bufLen, MSG_DONTWAIT); // expected: EWOULDBLOCK/EAGAIN (on Linux, macOS, Haiku) printf("%i\n", ret); if(ret < 0) { perror("recv"); break; } else { ok++; } } return 0; }