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