1#include <stdio.h>
2#include <kernel/OS.h>
3#include <string.h>
4#include <sys/time.h>
5#include <errno.h>
6
7#include "sys/socket.h"
8#include "netinet/in.h"
9#include "arpa/inet.h"
10#include "sys/select.h"
11
12#include "ufunc.h"
13
14int main(int argc, char **argv)
15{
16	int s;
17	int rv;
18	struct fd_set fdr, fdw, fde;
19	struct timeval tv;
20	int32 rtc;
21
22	test_banner("Select test");
23
24	s = socket(AF_INET, SOCK_DGRAM, 0);
25	if (s < 0)
26		err(s, "Socket creation failed");
27
28	FD_ZERO(&fdr);
29	FD_SET(s, &fdr);
30	FD_ZERO(&fdw);
31	FD_SET(s, &fdw);
32	FD_ZERO(&fde);
33	FD_SET(s, &fde);
34
35	tv.tv_sec = 5;
36	tv.tv_usec = 0;
37
38	printf("Trying with timeval (5 secs)...\n");
39	rtc = real_time_clock();
40	rv = select(s + 1, &fdr, NULL, &fde, &tv);
41	rtc = real_time_clock() - rtc;
42	printf("select gave %d in %ld seconds\n", rv, rtc);
43	if (rv < 0)
44		printf("errno = %d [%s]\n", errno, strerror(errno));
45
46	printf("resetting select fd's\n");
47	FD_ZERO(&fdr);
48	FD_SET(s, &fdr);
49	FD_ZERO(&fdw);
50	FD_SET(s, &fdw);
51	FD_ZERO(&fde);
52	FD_SET(s, &fde);
53
54	printf("Trying without timeval (= NULL)\n");
55	rv = select(s +1, &fdr, &fdw, &fde, NULL);
56	printf("select gave %d\n", rv);
57
58	if (FD_ISSET(s, &fdr))
59		printf("Data to read\n");
60	if (FD_ISSET(s, &fdw))
61		printf("OK to write\n");
62	if (FD_ISSET(s, &fde))
63		printf("Exception!\n");
64
65	closesocket(s);
66
67	printf("Test complete.\n");
68
69	return (0);
70}
71
72