diff --git a/designate/conf/mdns.py b/designate/conf/mdns.py
index 53620e990..474ab872a 100644
--- a/designate/conf/mdns.py
+++ b/designate/conf/mdns.py
@@ -23,16 +23,18 @@ MDNS_GROUP = cfg.OptGroup(
 
 MDNS_OPTS = [
     cfg.IntOpt('workers',
-               help='Number of mdns worker processes to spawn'),
+               help='Number of mDNS worker processes to spawn'),
     cfg.IntOpt('threads', default=1000,
-               help='Number of mdns greenthreads to spawn'),
+               help='Number of mDNS greenthreads to spawn'),
     cfg.ListOpt('listen',
                 default=['0.0.0.0:%d' % DEFAULT_MDNS_PORT],
                 help='mDNS host:port pairs to listen on'),
     cfg.IntOpt('tcp_backlog', default=100,
                help='mDNS TCP Backlog'),
+    cfg.IntOpt('tcp_keepidle',
+               help='mDNS TCP Keepidle in seconds'),
     cfg.FloatOpt('tcp_recv_timeout', default=0.5,
-                 help='mDNS TCP Receive Timeout'),
+                 help='mDNS TCP Receive Timeout in seconds'),
     cfg.BoolOpt('query_enforce_tsig', default=False,
                 help='Enforce all incoming queries (including AXFR) are TSIG '
                      'signed'),
diff --git a/designate/mdns/service.py b/designate/mdns/service.py
index c51bc4af8..1ad7957b6 100644
--- a/designate/mdns/service.py
+++ b/designate/mdns/service.py
@@ -42,6 +42,7 @@ class Service(service.Service):
             self.dns_application, self.tg,
             CONF['service:mdns'].listen,
             CONF['service:mdns'].tcp_backlog,
+            CONF['service:mdns'].tcp_keepidle,
             CONF['service:mdns'].tcp_recv_timeout,
         )
 
diff --git a/designate/service.py b/designate/service.py
index 11b3c4fbd..0314573cd 100644
--- a/designate/service.py
+++ b/designate/service.py
@@ -141,11 +141,13 @@ class WSGIService(Service):
 class DNSService:
     _TCP_RECV_MAX_SIZE = 65535
 
-    def __init__(self, app, tg, listen, tcp_backlog, tcp_recv_timeout):
+    def __init__(self, app, tg, listen, tcp_backlog, tcp_keepidle,
+                 tcp_recv_timeout):
         self._running = threading.Event()
         self.app = app
         self.tg = tg
         self.tcp_backlog = tcp_backlog
+        self.tcp_keepidle = tcp_keepidle
         self.tcp_recv_timeout = tcp_recv_timeout
         self.listen = listen
 
@@ -169,7 +171,7 @@ class DNSService:
 
     def _start(self, host, port):
         sock_tcp = utils.bind_tcp(
-            host, port, self.tcp_backlog
+            host, port, self.tcp_backlog, self.tcp_keepidle
         )
         sock_udp = utils.bind_udp(
             host, port
diff --git a/designate/tests/unit/test_service.py b/designate/tests/unit/test_service.py
index a9f862353..65615365a 100644
--- a/designate/tests/unit/test_service.py
+++ b/designate/tests/unit/test_service.py
@@ -270,6 +270,7 @@ class TestDNSService(oslotest.base.BaseTestCase):
             self.application, self.tg,
             CONF['service:mdns'].listen,
             CONF['service:mdns'].tcp_backlog,
+            CONF['service:mdns'].tcp_keepidle,
             CONF['service:mdns'].tcp_recv_timeout,
         )
         self.service._running = mock.Mock()
@@ -279,6 +280,9 @@ class TestDNSService(oslotest.base.BaseTestCase):
         self.assertEqual(
             CONF['service:mdns'].tcp_backlog, self.service.tcp_backlog
         )
+        self.assertEqual(
+            CONF['service:mdns'].tcp_keepidle, self.service.tcp_keepidle
+        )
         self.assertEqual(
             CONF['service:mdns'].tcp_recv_timeout,
             self.service.tcp_recv_timeout
@@ -291,7 +295,8 @@ class TestDNSService(oslotest.base.BaseTestCase):
 
         mock_bind_udp.assert_called_with('0.0.0.0', 5354)
         mock_bind_tcp.assert_called_with(
-            '0.0.0.0', 5354, CONF['service:mdns'].tcp_backlog
+            '0.0.0.0', 5354, CONF['service:mdns'].tcp_backlog,
+            CONF['service:mdns'].tcp_keepidle,
         )
 
     def test_service_stop(self):
@@ -353,6 +358,7 @@ class TestDNSService(oslotest.base.BaseTestCase):
             self.application, self.tg,
             CONF['service:mdns'].listen,
             CONF['service:mdns'].tcp_backlog,
+            CONF['service:mdns'].tcp_keepidle,
             CONF['service:mdns'].tcp_recv_timeout,
         )
         self.service._running = mock.Mock()
diff --git a/releasenotes/notes/mdns-tcp-keepidle-5ef6ec194a892f8a.yaml b/releasenotes/notes/mdns-tcp-keepidle-5ef6ec194a892f8a.yaml
new file mode 100644
index 000000000..45cedde0f
--- /dev/null
+++ b/releasenotes/notes/mdns-tcp-keepidle-5ef6ec194a892f8a.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    The new ``[service:mdns] tcp_keepidle`` option has been added. This option
+    allows customizing TCP keepidle set for socket used by designate-mdns.