drm/bridge: adv7511: Switch to atomic operations
[drm/drm-misc.git] / tools / testing / selftests / net / sk_connect_zero_addr.c
blob4be418aefd9f78a50e2b9daa96976beec0f5b355
1 // SPDX-License-Identifier: GPL-2.0
3 #include <arpa/inet.h>
4 #include <error.h>
5 #include <errno.h>
6 #include <unistd.h>
8 int main(void)
10 int fd1, fd2, one = 1;
11 struct sockaddr_in6 bind_addr = {
12 .sin6_family = AF_INET6,
13 .sin6_port = htons(20000),
14 .sin6_flowinfo = htonl(0),
15 .sin6_addr = {},
16 .sin6_scope_id = 0,
19 inet_pton(AF_INET6, "::", &bind_addr.sin6_addr);
21 fd1 = socket(AF_INET6, SOCK_STREAM, IPPROTO_IP);
22 if (fd1 < 0) {
23 error(1, errno, "socket fd1");
24 return -1;
27 if (setsockopt(fd1, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))) {
28 error(1, errno, "setsockopt(SO_REUSEADDR) fd1");
29 goto out_err1;
32 if (bind(fd1, (struct sockaddr *)&bind_addr, sizeof(bind_addr))) {
33 error(1, errno, "bind fd1");
34 goto out_err1;
37 if (listen(fd1, 0)) {
38 error(1, errno, "listen");
39 goto out_err1;
42 fd2 = socket(AF_INET6, SOCK_STREAM, IPPROTO_IP);
43 if (fd2 < 0) {
44 error(1, errno, "socket fd2");
45 goto out_err1;
48 if (connect(fd2, (struct sockaddr *)&bind_addr, sizeof(bind_addr))) {
49 error(1, errno, "bind fd2");
50 goto out_err2;
53 close(fd2);
54 close(fd1);
55 return 0;
57 out_err2:
58 close(fd2);
59 out_err1:
60 close(fd1);
61 return -1;