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);