drm - Fix memory leak in broadwell or later GPUs
[dragonfly.git] / test / udp / bindconnfail / udp_bindconnfail.c
blob7f42b7ee1dab31bbc691ea1184662a6ac6bafe2e
1 #include <sys/types.h>
2 #include <sys/socket.h>
4 #include <arpa/inet.h>
5 #include <netinet/in.h>
7 #include <err.h>
8 #include <stdio.h>
9 #include <stdint.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <unistd.h>
14 static void
15 usage(const char *cmd)
17 fprintf(stderr, "%s -4 ip4 -p port [-b ip4] -P bind_port\n", cmd);
18 exit(1);
21 int
22 main(int argc, char *argv[])
24 struct sockaddr_in in, local_in;
25 int s1, s2, opt, n, on = 1;
26 uint8_t buf[18];
28 memset(&in, 0, sizeof(in));
29 in.sin_family = AF_INET;
31 memset(&local_in, 0, sizeof(local_in));
32 local_in.sin_family = AF_INET;
34 while ((opt = getopt(argc, argv, "4:P:b:p:")) != -1) {
35 switch (opt) {
36 case '4':
37 if (inet_pton(AF_INET, optarg, &in.sin_addr) <= 0)
38 usage(argv[0]);
39 break;
41 case 'P':
42 local_in.sin_port = strtol(optarg, NULL, 10);
43 local_in.sin_port = htons(local_in.sin_port);
44 break;
46 case 'b':
47 if (inet_pton(AF_INET, optarg, &local_in.sin_addr) <= 0)
48 usage(argv[0]);
49 break;
51 case 'p':
52 in.sin_port = strtol(optarg, NULL, 10);
53 in.sin_port = htons(in.sin_port);
54 break;
56 default:
57 usage(argv[0]);
61 if (in.sin_addr.s_addr == INADDR_ANY || in.sin_port == 0 ||
62 local_in.sin_port == 0)
63 usage(argv[0]);
65 s1 = socket(AF_INET, SOCK_DGRAM, 0);
66 if (s1 < 0)
67 err(2, "socket 1 failed");
69 if (setsockopt(s1, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)) < 0)
70 err(2, "setsockopt 1 SO_REUSEPORT failed");
72 if (bind(s1, (const struct sockaddr *)&local_in, sizeof(local_in)) < 0)
73 err(2, "bind 1 failed");
75 if (connect(s1, (const struct sockaddr *)&in, sizeof(in)) < 0)
76 err(2, "connect 1 failed");
78 s2 = socket(AF_INET, SOCK_DGRAM, 0);
79 if (s2 < 0)
80 err(2, "socket 2 failed");
82 if (setsockopt(s2, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)) < 0)
83 err(2, "setsockopt 2 SO_REUSEPORT failed");
85 if (bind(s2, (const struct sockaddr *)&local_in, sizeof(local_in)) < 0)
86 err(2, "bind 2 failed");
88 if (connect(s2, (const struct sockaddr *)&in, sizeof(in)) == 0)
89 errx(2, "connect 2 succeeded");
91 close(s1);
93 n = sendto(s2, buf, sizeof(buf), 0,
94 (const struct sockaddr *)&in, sizeof(in));
95 if (n < 0)
96 err(2, "sendto failed");
97 else if (n != (int)sizeof(buf))
98 errx(2, "sent truncated data %d", n);
100 n = read(s2, buf, sizeof(buf));
101 if (n < 0)
102 err(2, "read failed");
103 printf("read %d, done\n", n);
105 exit(0);