summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/fsock.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
index 13ce0e72f3..2db885931a 100644
--- a/ext/standard/fsock.c
+++ b/ext/standard/fsock.c
@@ -532,24 +532,27 @@ static void php_sockwait_for_data(php_sockbuf *sock)
{
fd_set fdr, tfdr;
int retval;
- struct timeval timeout;
+ struct timeval timeout, *ptimeout;
FD_ZERO(&fdr);
FD_SET(sock->socket, &fdr);
sock->timeout_event = 0;
+ if (timeout.tv_sec == -1)
+ ptimeout = NULL;
+ else
+ ptimeout = &timeout;
+
while(1) {
tfdr = fdr;
timeout = sock->timeout;
- if (timeout.tv_sec == -1)
- retval = select(sock->socket + 1, &tfdr, NULL, NULL, NULL);
- else {
- retval = select(sock->socket + 1, &tfdr, NULL, NULL, &timeout);
- if (retval == 0)
- sock->timeout_event = 1;
- }
- if(retval == 1 || retval == 0)
+ retval = select(sock->socket + 1, &tfdr, NULL, NULL, ptimeout);
+
+ if (retval == 0)
+ sock->timeout_event = 1;
+
+ if (retval >= 0)
break;
}
}