summary refs log tree commit diff
path: root/pkgs/tools/networking/jwhois/connect.patch
blob: c26025a8239284d9d0b02d840514edf18e796982 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
https://bugzilla.redhat.com/attachment.cgi?id=265091

This fixes somewhat reversed logic of trying to connect to WHOIS server.
Tue Nov 20 2007, Lubomir Kundrak <lkundrak@redhat.com>

--- jwhois-4.0/src/utils.c.connect	2007-06-26 09:00:20.000000000 +0200
+++ jwhois-4.0/src/utils.c	2007-11-20 17:05:33.000000000 +0100
@@ -247,7 +247,7 @@ make_connect(const char *host, int port)
     {
       return -1;
     }
-  while (res)
+  for (; res; res = res->ai_next)
     {
       sa = res->ai_addr;
       sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
@@ -266,15 +266,15 @@ make_connect(const char *host, int port)
       flags = fcntl(sockfd, F_GETFL, 0);
       if (fcntl(sockfd, F_SETFL, flags|O_NONBLOCK) == -1)
 	{
+	  close (sockfd);
 	  return -1;
 	}
 
-
       error = connect(sockfd, res->ai_addr, res->ai_addrlen);
-
       if (error < 0 && errno != EINPROGRESS)
 	{
-	  break;
+	  close (sockfd);
+	  continue;
 	}
 
       FD_ZERO(&fdset);
@@ -283,18 +283,20 @@ make_connect(const char *host, int port)
       error = select(FD_SETSIZE, NULL, &fdset, NULL, &timeout);
       if (error == 0)
 	{
-	  break;
+	  close (sockfd);
+	  return -1;
 	}
 
       retlen = sizeof(retval);
       error = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &retval, &retlen);
       if (error < 0 || retval)
 	{
-	  break;
+	  close (sockfd);
+	  return -1;
 	}
-      res = res->ai_next;
+
+      break;
     }
-  if (error < 0 || retval) return -1;
 #endif
 
   return sockfd;