From 7b3616db775ce11bd85918af2a7a38bb15c3729f Mon Sep 17 00:00:00 2001 From: Sergei Turchanov Date: Thu, 3 Sep 2015 17:24:34 +1000 Subject: [PATCH 1/2] Fix #70456: mysqlnd doesn't activate TCP keep-alive when connecting to a server libmysqlclient activates TCP keep-alive when connecting to a server. PHP mysqlnd extension must do the same to maintain compatibility. --- ext/mysqlnd/mysqlnd_net.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ext/mysqlnd/mysqlnd_net.c b/ext/mysqlnd/mysqlnd_net.c index 8683248e4cf..fa0ea8fb638 100644 --- a/ext/mysqlnd/mysqlnd_net.c +++ b/ext/mysqlnd/mysqlnd_net.c @@ -61,6 +61,27 @@ mysqlnd_set_sock_no_delay(php_stream * stream TSRMLS_DC) /* }}} */ +/* {{{ mysqlnd_set_sock_keepalive */ +static int +mysqlnd_set_sock_keepalive(php_stream * stream TSRMLS_DC) +{ + + int socketd = ((php_netstream_data_t*)stream->abstract)->socket; + int ret = SUCCESS; + int flag = 1; + int result = setsockopt(socketd, SOL_SOCKET, SO_KEEPALIVE, (char *) &flag, sizeof(int)); + + DBG_ENTER("mysqlnd_set_sock_keepalive"); + + if (result == -1) { + ret = FAILURE; + } + + DBG_RETURN(ret); +} +/* }}} */ + + /* {{{ mysqlnd_net::network_read_ex */ static enum_func_status MYSQLND_METHOD(mysqlnd_net, network_read_ex)(MYSQLND_NET * const net, zend_uchar * const buffer, const size_t count, @@ -252,6 +273,8 @@ MYSQLND_METHOD(mysqlnd_net, post_connect_set_opt)(MYSQLND_NET * const net, if (!memcmp(scheme, "tcp://", sizeof("tcp://") - 1)) { /* TCP -> Set TCP_NODELAY */ mysqlnd_set_sock_no_delay(net_stream TSRMLS_CC); + /* TCP -> Set SO_KEEPALIVE */ + mysqlnd_set_sock_keepalive(net_stream TSRMLS_CC); } } From b89f128480e673c0c0981a0037c6f4af883881d0 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Wed, 9 Sep 2015 03:12:59 +0200 Subject: [PATCH 2/2] updated NEWS --- NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS b/NEWS index 7d4206ee98a..7490219a8bc 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,10 @@ PHP NEWS . Fixed bug #70001 (Assigning to DOMNode::textContent does additional entity encoding). (cmb) +- Mysqlnd: + . Fixed bug #70456 (mysqlnd doesn't activate TCP keep-alive when connecting to + a server). (Sergei Turchanov) + - OpenSSL: . Fixed bug #55259 (openssl extension does not get the DH parameters from DH key resource). (Jakub Zelenka)