diff options
-rwxr-xr-x | main/streams/streams.c | 3 | ||||
-rw-r--r-- | main/streams/transports.c | 2 | ||||
-rw-r--r-- | main/streams/xp_socket.c | 10 |
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) { |