1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/socket.h>
4 #include <stdbool.h>
5
main()6 int main() {
7 int fds[2];
8 int domain;
9 domain = AF_UNIX;
10 // domain = AF_INET; // works
11 printf("Domain: %i\n", domain);
12 int ret = socketpair(domain, SOCK_DGRAM, 0, fds); // try also: SOCK_STREAM
13 if(ret) {
14 perror("Could not get socketpair");
15 return 1;
16 }
17
18 /*
19 struct timeval v = {
20 .tv_sec = 1,
21 .tv_usec = 0
22 };
23 ret = setsockopt(fds[0], SOL_SOCKET, SO_RCVTIMEO, &v, sizeof(v));
24 if(ret) {
25 perror("setsockopt");
26 }
27 */
28
29 size_t bufLen = 1024;
30 char *buf = calloc(bufLen, 1);
31 int ok = 0;
32 while(true) {
33 printf("recv %i\n", ok);
34 ret = recv(fds[0], &buf[0], bufLen, MSG_DONTWAIT);
35 // expected: EWOULDBLOCK/EAGAIN (on Linux, macOS, Haiku)
36 printf("%i\n", ret);
37 if(ret < 0) {
38 perror("recv");
39 break;
40 } else {
41 ok++;
42 }
43 }
44
45 return 0;
46 }
47