Merge "Support TCP keepalives in geard"

This commit is contained in:
Jenkins 2016-07-12 16:38:40 +00:00 committed by Gerrit Code Review
commit defb9722b8
2 changed files with 33 additions and 2 deletions

View File

@ -2424,6 +2424,10 @@ class Server(BaseClientServer):
access control rules to its connections.
:arg str host: Host name or IPv4/IPv6 address to bind to. Defaults
to "whatever getaddrinfo() returns", which might be IPv4-only.
:arg bool keepalive: Whether to use TCP keepalives
:arg int tcp_keepidle: Idle time after which to start keepalives sending
:arg int tcp_keepintvl: Interval in seconds between TCP keepalives
:arg int tcp_keepcnt: Count of TCP keepalives to send before disconnect
"""
edge_bitmask = select.EPOLLET
@ -2433,7 +2437,8 @@ class Server(BaseClientServer):
def __init__(self, port=4730, ssl_key=None, ssl_cert=None, ssl_ca=None,
statsd_host=None, statsd_port=8125, statsd_prefix=None,
server_id=None, acl=None, host=None):
server_id=None, acl=None, host=None, keepalive=False,
tcp_keepidle=7200, tcp_keepintvl=75, tcp_keepcnt=9):
self.port = port
self.ssl_key = ssl_key
self.ssl_cert = ssl_cert
@ -2462,6 +2467,15 @@ class Server(BaseClientServer):
self.socket = socket.socket(af, socktype, proto)
self.socket.setsockopt(socket.SOL_SOCKET,
socket.SO_REUSEADDR, 1)
if keepalive:
self.socket.setsockopt(socket.SOL_SOCKET,
socket.SO_KEEPALIVE, 1)
self.socket.setsockopt(socket.IPPROTO_TCP,
socket.TCP_KEEPIDLE, tcp_keepidle)
self.socket.setsockopt(socket.IPPROTO_TCP,
socket.TCP_KEEPINTVL, tcp_keepintvl)
self.socket.setsockopt(socket.IPPROTO_TCP,
socket.TCP_KEEPCNT, tcp_keepcnt)
except socket.error:
self.socket = None
continue

View File

@ -60,6 +60,18 @@ support.
help='path to SSL private key')
parser.add_argument('--acl', dest='acl', metavar='PATH',
help='path to ACL file')
parser.add_argument('--keepalive', dest='keepalive', default=False,
action='store_true',
help='enable TCP keepalives in socket')
parser.add_argument('--keepalive-idle', dest='tcp_keepidle', type=int,
default=7200, action='store',
help='TCP keepalive idle time')
parser.add_argument('--keepalive-interval', dest='tcp_keepintvl', type=int,
default=75, action='store',
help='TCP keepalive probe interval')
parser.add_argument('--keepalive-count', dest='tcp_keepcnt', type=int,
default=9, action='store',
help='TCP keepalive probes count')
parser.add_argument('--version', dest='version', action='store_true',
help='show version')
self.args = parser.parse_args()
@ -109,7 +121,12 @@ support.
statsd_host,
statsd_port,
statsd_prefix,
acl=acl)
acl=acl,
keepalive=self.args.keepalive,
tcp_keepidle=self.args.tcp_keepidle,
tcp_keepintvl=self.args.tcp_keepintvl,
tcp_keepcnt=self.args.tcp_keepcnt
)
signal.pause()