Introduction
Introduction Statistics Contact Development Disclaimer Help
ii-ipv6.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
ii-ipv6.diff (1649B)
---
1 --- ii.c.orig 2007-07-22 11:54:29.061710701 +0100
2 +++ ii.c 2007-07-22 14:08:42.833057387 +0100
3 @@ -153,25 +153,45 @@
4
5 static int tcpopen(unsigned short port) {
6 int fd;
7 - struct sockaddr_in sin;
8 - struct hostent *hp = gethostbyname(host);
9 -
10 - memset(&sin, 0, sizeof(struct sockaddr_in));
11 - if(!hp) {
12 - perror("ii: cannot retrieve host information");
13 + struct addrinfo req, *res, *orig_res;
14 + char service[6];
15 + char errmsg[512];
16 +
17 + snprintf(service, 6, "%u", port);
18 + memset(&req, 0, sizeof(req));
19 + req.ai_flags = AI_NUMERICSERV;
20 + req.ai_socktype = SOCK_STREAM;
21 + int e = getaddrinfo(host, service, &req, &res);
22 + if(e) {
23 + fprintf(stderr, "ii: getaddrinfo() failed : %s\n", gai_…
24 exit(EXIT_FAILURE);
25 }
26 - sin.sin_family = AF_INET;
27 - memcpy(&sin.sin_addr, hp->h_addr, hp->h_length);
28 - sin.sin_port = htons(port);
29 - if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
30 - perror("ii: cannot create socket");
31 - exit(EXIT_FAILURE);
32 +
33 + orig_res = res;
34 + for (; res; res = res->ai_next ) {
35 + fd = socket(res->ai_family, res->ai_socktype, res->ai_p…
36 +
37 + if(fd < 0) {
38 + snprintf(errmsg, sizeof(errmsg), "ii: socket() …
39 + continue;
40 + }
41 +
42 + if(connect(fd, res->ai_addr, res->ai_addrlen) != 0) {
43 + snprintf(errmsg, sizeof(errmsg), "ii: connect()…
44 + fd = -1;
45 + continue;
46 + }
47 +
48 + /* sucessful connection */
49 + break;
50 }
51 - if(connect(fd, (const struct sockaddr *) &sin, sizeof(sin)) < 0…
52 - perror("ii: cannot connect to host");
53 + freeaddrinfo(orig_res);
54 +
55 + if(fd < 0) {
56 + fprintf(stderr, "%s\n", errmsg);
57 exit(EXIT_FAILURE);
58 }
59 +
60 return fd;
61 }
62
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.