[ekg2-commit] r4224 - trunk/ekg: trunk/ekg/net.c

SVN commit svn w toxygen.net
Czw, 7 Sie 2008, 23:35:01 CEST


Author: darkjames
Date: 2008-08-07 23:35:01 +0200 (Thu, 07 Aug 2008)
New Revision: 4224

Modified:
   trunk/ekg/net.c
Log:
- fix some fd-leaks



Modified: trunk/ekg/net.c
===================================================================
--- trunk/ekg/net.c	2008-08-07 19:03:59 UTC (rev 4223)
+++ trunk/ekg/net.c	2008-08-07 21:35:01 UTC (rev 4224)
@@ -383,8 +383,10 @@
 
 	*address = NULL;
 
-	if (array_count(a) < 3) 
+	if (array_count(a) < 3) {
+		array_free(a);
 		return 0;
+	}
 
 	addr	= a[1];
 	*family	= atoi(a[2]);
@@ -450,7 +452,8 @@
 
 	if (type == 1)
 		return 0;
-	else if (type || getsockopt(fd, SOL_SOCKET, SO_ERROR, &res, &res_size) || res) {
+
+	if (type || getsockopt(fd, SOL_SOCKET, SO_ERROR, &res, &res_size) || res) {
 		if (res)
 			debug_error("ekg_connect_handler(), error: %s\n", strerror(res));
 		ekg_connect_loop(c);
@@ -490,7 +493,6 @@
 
 			len = ekg_build_sin(host, c->port, &addr, &family);
 			debug_function("ekg_connect_loop(), connect: %s, sinlen: %d\n", host, len);
-			xfree(host);
 			if (!len)
 				break;
 
@@ -503,19 +505,15 @@
 			if (ioctl(fd, FIONBIO, &one) == -1) {
 				const int err = errno;
 				debug_error("ekg_connect_loop(), ioctl() failed: %s\n", strerror(err));
+				close(fd);
 				break;
 			}
 
 			connret = connect(fd, addr, len);
-			if (connret &&
-#ifdef NO_POSIX_SYSTEM
-					(WSAGetLastError() != WSAEWOULDBLOCK)
-#else
-					(errno != EINPROGRESS)
-#endif
-					) {
+			if (connret && errno != EINPROGRESS) {
 				const int err = errno;
 				debug_error("ekg_connect_loop(), connect() failed: %s\n", strerror(err));
+				close(fd);
 				break;
 			}
 
@@ -525,6 +523,7 @@
 			return 1;
 		} while (0);
 
+		xfree(host);
 		xfree(addr);
 	}
 



Więcej informacji o liście dyskusyjnej ekg2-commit