diff --git a/libs/xmlrpc-c/lib/abyss/src/socket_unix.c b/libs/xmlrpc-c/lib/abyss/src/socket_unix.c index 623185269e..b2ebdf12c0 100644 --- a/libs/xmlrpc-c/lib/abyss/src/socket_unix.c +++ b/libs/xmlrpc-c/lib/abyss/src/socket_unix.c @@ -227,7 +227,19 @@ channelRead(TChannel * const channelP, struct socketUnix * const socketUnixP = channelP->implP; int rc; - rc = recv(socketUnixP->fd, buffer, bufferSize, 0); + fd_set rfds, efds; + struct timeval tv = { 10, 0 }; + + FD_ZERO(&rfds); + FD_ZERO(&efds); + FD_SET(socketUnixP->fd, &rfds); + FD_SET(socketUnixP->fd, &efds); + + if ((rc = select(socketUnixP->fd + 1, &rfds, NULL, &efds, &tv)) > 0) { + rc = recv(socketUnixP->fd, buffer, bufferSize, 0); + } else { + rc = -1; + } if (rc < 0) { *failedP = TRUE;