package mpc
tags 495430 + fixed-upstream
thanks

The bug has been fixed in upstream's SVN repo.
A patch based on the mentioned fix is attached.

-- 
Stanislav
diff -urN mpc-0.12.1-orig/src/libmpdclient.c mpc-0.12.1/src/libmpdclient.c
--- mpc-0.12.1-orig/src/libmpdclient.c	2007-03-21 21:22:41.000000000 +0300
+++ mpc-0.12.1/src/libmpdclient.c	2008-08-18 21:27:52.000000000 +0400
@@ -95,18 +95,21 @@
                            const struct sockaddr *serv_addr, int addrlen)
 {
 	int iMode = 1; /* 0 = blocking, else non-blocking */
+	if (connect(connection->sock, serv_addr, addrlen) == SOCKET_ERROR)
+		return 1;
 	ioctlsocket(connection->sock, FIONBIO, (u_long FAR*) &iMode);
-	return (connect(connection->sock,serv_addr,addrlen) == SOCKET_ERROR
-			&& WSAGetLastError() != WSAEWOULDBLOCK);
+	return 0;
 }
 #else /* !WIN32 (sane operating systems) */
 static int do_connect_fail(mpd_Connection *connection,
                            const struct sockaddr *serv_addr, int addrlen)
 {
-	int flags = fcntl(connection->sock, F_GETFL, 0);
+	int flags;
+	if (connect(connection->sock, serv_addr, addrlen) < 0)
+		return 1;
+	flags = fcntl(connection->sock, F_GETFL, 0);
 	fcntl(connection->sock, F_SETFL, flags | O_NONBLOCK);
-	return (connect(connection->sock,serv_addr,addrlen)<0 &&
-				errno!=EINPROGRESS);
+	return 0;
 }
 #endif /* !WIN32 */
 
@@ -162,11 +165,13 @@
 		/* connect stuff */
  		if (do_connect_fail(connection,
 		                    res->ai_addr, res->ai_addrlen)) {
- 			/* try the next address family */
+ 			/* try the next address */
  			closesocket(connection->sock);
  			connection->sock = -1;
  			continue;
 		}
+
+		break;
 	}
 
 	freeaddrinfo(addrinfo);

Reply via email to