libpurple/protocols/gg/lib/network.c

branch
release-2.x.y
changeset 35627
fd11790cc4d6
parent 35617
c9069e0e3c36
equal deleted inserted replaced
35625:783e5cce1a46 35627:fd11790cc4d6
39 { 39 {
40 struct sockaddr_in sin; 40 struct sockaddr_in sin;
41 socklen_t sin_len = sizeof(sin); 41 socklen_t sin_len = sizeof(sin);
42 int server = -1; 42 int server = -1;
43 int tmp = 1; 43 int tmp = 1;
44 int errno_copy;
44 45
45 server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 46 server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
46 47
47 sv[0] = -1; 48 sv[0] = -1;
48 sv[1] = -1; 49 sv[1] = -1;
49 50
50 if (server == -1) 51 if (server == -1)
51 goto fail; 52 goto fail;
52 53
53 memset(&sin, 0, sizeof(sin)); 54 memset(&sin, 0, sizeof(sin));
54 sin.sin_family = AF_INET; 55 sin.sin_family = AF_INET;
55 sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 56 sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
56 sin.sin_port = 0; 57 sin.sin_port = 0;
57 58
64 if (listen(server, 1) == -1) 65 if (listen(server, 1) == -1)
65 goto fail; 66 goto fail;
66 67
67 if (getsockname(server, (struct sockaddr*) &sin, &sin_len) == -1) 68 if (getsockname(server, (struct sockaddr*) &sin, &sin_len) == -1)
68 goto fail; 69 goto fail;
69 70
70 sin.sin_family = AF_INET; 71 sin.sin_family = AF_INET;
71 sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 72 sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
72 73
73 sv[0] = socket(AF_INET, SOCK_STREAM, 0); 74 sv[0] = socket(AF_INET, SOCK_STREAM, 0);
74 75
75 if (sv[0] == -1) 76 if (sv[0] == -1)
76 goto fail; 77 goto fail;
77 78
78 if (connect(sv[0], (struct sockaddr*) &sin, sin_len) == -1) 79 if (connect(sv[0], (struct sockaddr*) &sin, sin_len) == -1)
79 goto fail; 80 goto fail;
80 81
81 sv[1] = accept(server, NULL, NULL); 82 sv[1] = accept(server, NULL, NULL);
82 83
86 close(server); 87 close(server);
87 88
88 return 0; 89 return 0;
89 90
90 fail: 91 fail:
92 errno_copy = errno;
91 close(server); 93 close(server);
92 close(sv[0]); 94 close(sv[0]);
93 close(sv[1]); 95 close(sv[1]);
96 errno = errno_copy;
94 97
95 return -1; 98 return -1;
96 } 99 }
97 100
98 static int gg_win32_map_wsa_error_to_errno(int wsaewouldblock_map) 101 static int gg_win32_map_wsa_error_to_errno(int wsaewouldblock_map)

mercurial