diff --git a/php_memcached.c b/php_memcached.c index 930e1189..3c26c579 100644 --- a/php_memcached.c +++ b/php_memcached.c @@ -1288,6 +1288,11 @@ static PHP_METHOD(Memcached, __construct) if (rc != MEMCACHED_SUCCESS) { php_error_docref(NULL, E_WARNING, "Failed to turn on binary protocol: %s", memcached_strerror(intern->memc, rc)); } + /* Also enable TCP_NODELAY when binary protocol is enabled */ + rc = memcached_behavior_set(intern->memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, 1); + if (rc != MEMCACHED_SUCCESS) { + php_error_docref(NULL, E_WARNING, "Failed to set TCP_NODELAY: %s", memcached_strerror(intern->memc, rc)); + } } if (MEMC_G(default_behavior.connect_timeout)) { diff --git a/php_memcached_session.c b/php_memcached_session.c index 6acd9d3e..8a0a7705 100644 --- a/php_memcached_session.c +++ b/php_memcached_session.c @@ -178,7 +178,9 @@ void s_unlock_session(memcached_st *memc) static zend_bool s_configure_from_ini_values(memcached_st *memc, zend_bool silent) { +/* This macro looks like a function but returns errors directly */ #define check_set_behavior(behavior, value) \ +{ \ int b = (behavior); \ uint64_t v = (value); \ if (v != memcached_behavior_get(memc, b)) { \ @@ -189,10 +191,13 @@ zend_bool s_configure_from_ini_values(memcached_st *memc, zend_bool silent) } \ return 0; \ } \ - } + } \ +} if (MEMC_SESS_INI(binary_protocol_enabled)) { check_set_behavior(MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); + /* Also enable TCP_NODELAY when binary protocol is enabled */ + check_set_behavior(MEMCACHED_BEHAVIOR_TCP_NODELAY, 1); } if (MEMC_SESS_INI(consistent_hash_enabled)) {