summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmain/streams/streams.c3
-rw-r--r--main/streams/transports.c2
-rw-r--r--main/streams/xp_socket.c10
3 files changed, 11 insertions, 4 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c
index dc7a4f37ed..e3fe39d9c0 100755
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -602,9 +602,10 @@ PHPAPI int _php_stream_eof(php_stream *stream TSRMLS_DC)
return 0;
}
+ /* use the configured timeout when checking eof */
if (!stream->eof && PHP_STREAM_OPTION_RETURN_ERR ==
php_stream_set_option(stream, PHP_STREAM_OPTION_CHECK_LIVENESS,
- 0, NULL)) {
+ -1, NULL)) {
stream->eof = 1;
}
diff --git a/main/streams/transports.c b/main/streams/transports.c
index 1c20026655..04a4eccfbd 100644
--- a/main/streams/transports.c
+++ b/main/streams/transports.c
@@ -74,6 +74,8 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, long namelen, int
if (persistent_id) {
switch(php_stream_from_persistent_id(persistent_id, &stream TSRMLS_CC)) {
case PHP_STREAM_PERSISTENT_SUCCESS:
+ /* use a 0 second timeout when checking if the socket
+ * has already died */
if (PHP_STREAM_OPTION_RETURN_OK == php_stream_set_option(stream, PHP_STREAM_OPTION_CHECK_LIVENESS, 0, NULL)) {
return stream;
}
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index 00b20b2b63..d70a9c79ba 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -230,10 +230,14 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
char buf;
int alive = 1;
- if (sock->timeout.tv_sec == -1) {
- tv.tv_sec = FG(default_socket_timeout);
+ if (value == -1) {
+ if (sock->timeout.tv_sec == -1) {
+ tv.tv_sec = FG(default_socket_timeout);
+ } else {
+ tv = sock->timeout;
+ }
} else {
- tv = sock->timeout;
+ tv.tv_sec = value;
}
if (sock->socket == -1) {