diff --git a/NEWS b/NEWS index 17103fd4f..b8a460938 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,8 @@ ver 0.20 (not yet released) * reset song priority on playback * write database and state file atomically * remove dependency on GLib +* database + - proxy: add TCP keepalive option ver 0.19.8 (2015/01/14) * input diff --git a/doc/user.xml b/doc/user.xml index 74c169c11..e5061f1ca 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -1530,6 +1530,19 @@ buffer_size: 16384 MPD instance. + + + keepalive + yes|no + + + Send TCP keepalive packets to the "master" + MPD instance? This option can + help avoid certain firewalls dropping inactive + connections, at the expensive of a very small amount of + additional network traffic. Disabled by default. + + diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx index 01848690c..f7518c7ab 100644 --- a/src/db/plugins/ProxyDatabasePlugin.cxx +++ b/src/db/plugins/ProxyDatabasePlugin.cxx @@ -71,6 +71,7 @@ class ProxyDatabase final : public Database, SocketMonitor, IdleMonitor { std::string host; unsigned port; + bool keepalive; struct mpd_connection *connection; @@ -336,6 +337,7 @@ ProxyDatabase::Configure(const config_param ¶m, gcc_unused Error &error) { host = param.GetBlockValue("host", ""); port = param.GetBlockValue("port", 0u); + keepalive = param.GetBlockValue("keepalive", false); return true; } @@ -376,6 +378,10 @@ ProxyDatabase::Connect(Error &error) return false; } +#if LIBMPDCLIENT_CHECK_VERSION(2, 10, 0) + mpd_connection_set_keepalive(connection, keepalive); +#endif + idle_received = unsigned(-1); is_idle = false;