diff --git a/memcached.ini b/memcached.ini index f4bd68c0..de483dcb 100644 --- a/memcached.ini +++ b/memcached.ini @@ -47,6 +47,11 @@ memcached.sess_number_of_replicas = 0 ; memcached session replica read randomize memcached.sess_randomize_replica_read = Off +; memcached connect timeout value +; In non-blocking mode this changes the value of the timeout +; during socket connection in milliseconds. Specifying -1 means an infinite timeout. +memcached.sess_connect_timeout = 1000 + ; Set the compression type ; valid values are: fastlz, zlib ; the default is fastlz diff --git a/php_memcached.c b/php_memcached.c index d1d07246..064e3b6c 100644 --- a/php_memcached.c +++ b/php_memcached.c @@ -294,6 +294,7 @@ PHP_INI_BEGIN() STD_PHP_INI_ENTRY("memcached.sess_randomize_replica_read", "0", PHP_INI_ALL, OnUpdateBool, sess_randomize_replica_read, zend_php_memcached_globals, php_memcached_globals) STD_PHP_INI_ENTRY("memcached.sess_consistent_hashing", "0", PHP_INI_ALL, OnUpdateBool, sess_consistent_hashing_enabled, zend_php_memcached_globals, php_memcached_globals) STD_PHP_INI_ENTRY("memcached.sess_remove_failed", "0", PHP_INI_ALL, OnUpdateBool, sess_remove_failed_enabled, zend_php_memcached_globals, php_memcached_globals) + STD_PHP_INI_ENTRY("memcached.sess_connect_timeout", "1000", PHP_INI_ALL, OnUpdateLong, sess_connect_timeout, zend_php_memcached_globals, php_memcached_globals) #endif STD_PHP_INI_ENTRY("memcached.compression_type", "fastlz", PHP_INI_ALL, OnUpdateCompressionType, compression_type, zend_php_memcached_globals, php_memcached_globals) STD_PHP_INI_ENTRY("memcached.compression_factor", "1.3", PHP_INI_ALL, OnUpdateReal, compression_factor, zend_php_memcached_globals, php_memcached_globals) @@ -3050,8 +3051,8 @@ static void php_memc_init_globals(zend_php_memcached_globals *php_memcached_glob MEMC_G(sess_locked) = 0; MEMC_G(sess_lock_key) = NULL; MEMC_G(sess_lock_key_len) = 0; - MEMC_G(sess_number_of_replicas) = 0; MEMC_G(sess_randomize_replica_read) = 0; + MEMC_G(sess_connect_timeout) = 1000; #endif MEMC_G(serializer_name) = NULL; MEMC_G(serializer) = SERIALIZER_DEFAULT; diff --git a/php_memcached.h b/php_memcached.h index 2bd5c83e..e3fd1bef 100644 --- a/php_memcached.h +++ b/php_memcached.h @@ -71,6 +71,7 @@ ZEND_BEGIN_MODULE_GLOBALS(php_memcached) zend_bool sess_randomize_replica_read; zend_bool sess_remove_failed_enabled; zend_bool sess_consistent_hashing_enabled; + long sess_connect_timeout; #endif char *serializer_name; enum memcached_serializer serializer; diff --git a/php_memcached_session.c b/php_memcached_session.c index 2b64581e..68501bb5 100644 --- a/php_memcached_session.c +++ b/php_memcached_session.c @@ -234,6 +234,11 @@ PS_OPEN_FUNC(memcached) return FAILURE; } } + + if (memcached_behavior_set(memc_sess->memc_sess, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, (uint64_t) MEMC_G(sess_connect_timeout)) == MEMCACHED_FAILURE) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to set memcached connection timeout"); + return FAILURE; + } /* Allow libmemcached remove failed servers */ if (MEMC_G(sess_remove_failed_enabled)) {