diff options
author | Antony Dovgal <tony2001@php.net> | 2007-03-14 19:22:14 +0000 |
---|---|---|
committer | Antony Dovgal <tony2001@php.net> | 2007-03-14 19:22:14 +0000 |
commit | f9d54cbb75d40e3fd4c04426d14bb9c284674c76 (patch) | |
tree | 48f4851df56afc44170ddf8fd48ffeebd8e99140 /ext/openssl | |
parent | b85f4d40771d7408ec75f896837b9a9ca696a153 (diff) | |
download | php-git-f9d54cbb75d40e3fd4c04426d14bb9c284674c76.tar.gz |
MFH: fix #40750 (openssl stream wrapper ignores default_stream_timeout)
Diffstat (limited to 'ext/openssl')
-rw-r--r-- | ext/openssl/xp_ssl.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index 36d1520e8c..df03982878 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -47,6 +47,7 @@ int php_openssl_get_x509_list_id(void); typedef struct _php_openssl_netstream_data_t { php_netstream_data_t s; SSL *ssl_handle; + struct timeval connect_timeout; int enable_on_connect; int is_client; int ssl_active; @@ -390,7 +391,7 @@ static inline int php_openssl_enable_crypto(php_stream *stream, int n, retry = 1; if (cparam->inputs.activate && !sslsock->ssl_active) { - float timeout = sslsock->s.timeout.tv_sec + sslsock->s.timeout.tv_usec / 1000000; + float timeout = sslsock->connect_timeout.tv_sec + sslsock->connect_timeout.tv_usec / 1000000; int blocked = sslsock->s.is_blocked; if (!sslsock->state_set) { @@ -608,7 +609,7 @@ static int php_openssl_sockop_set_option(php_stream *stream, int option, int val tv.tv_sec = FG(default_socket_timeout); tv.tv_usec = 0; } else { - tv = sslsock->s.timeout; + tv = sslsock->connect_timeout; } } else { tv.tv_sec = value; @@ -766,8 +767,13 @@ php_stream *php_openssl_ssl_socket_factory(const char *proto, long protolen, memset(sslsock, 0, sizeof(*sslsock)); sslsock->s.is_blocked = 1; - sslsock->s.timeout.tv_sec = timeout->tv_sec; - sslsock->s.timeout.tv_usec = timeout->tv_usec; + /* this timeout is used by standard stream funcs, therefor it should use the default value */ + sslsock->s.timeout.tv_sec = FG(default_socket_timeout); + sslsock->s.timeout.tv_usec = 0; + + /* use separate timeout for our private funcs */ + sslsock->connect_timeout.tv_sec = timeout->tv_sec; + sslsock->connect_timeout.tv_usec = timeout->tv_usec; /* we don't know the socket until we have determined if we are binding or * connecting */ |