diff options
author | Ask Solem <ask@celeryproject.org> | 2016-12-14 13:53:46 -0800 |
---|---|---|
committer | Ask Solem <ask@celeryproject.org> | 2016-12-14 13:53:46 -0800 |
commit | b14962c2dc8eb38f7312ea1a4377e825cbe3834d (patch) | |
tree | 30cae31b2c32f620a5ffcb495a44303eea240cea | |
parent | 479a119e97f2c97987814bb89019e803cc8f95cc (diff) | |
download | py-amqp-b14962c2dc8eb38f7312ea1a4377e825cbe3834d.tar.gz |
Set default KEEPIDLE/KEEPCNT/KEEPINTVL and TCP_USER_TIMEOUT
-rw-r--r-- | amqp/transport.py | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/amqp/transport.py b/amqp/transport.py index ef9177f..e4c7977 100644 --- a/amqp/transport.py +++ b/amqp/transport.py @@ -61,9 +61,27 @@ KNOWN_TCP_OPTS = ( TCP_OPTS = { getattr(socket, opt) for opt in KNOWN_TCP_OPTS if hasattr(socket, opt) } +DEFAULT_SOCKET_SETTINGS = { + socket.TCP_NODELAY: 1, +} + if HAS_TCP_USER_TIMEOUT: KNOWN_TCP_OPTS += ('TCP_USER_TIMEOUT',) TCP_OPTS.add(TCP_USER_TIMEOUT) + DEFAULT_SOCKET_SETTINGS[TCP_USER_TIMEOUT] = 1000 + + +try: + from socket import TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT # noqa +except ImportError: + pass +else: + DEFAULT_SOCKET_SETTINGS.update({ + TCP_KEEPIDLE: 60, + TCP_KEEPINTVL: 10, + TCP_KEEPCNT: 9, + }) + def to_host_port(host, default=AMQP_PORT): @@ -178,22 +196,10 @@ class _AbstractTransport(object): } def _set_socket_options(self, socket_settings): - user_timeout = 0 - if self.connect_timeout is not None: - user_timeout = int(math.ceil(self.connect_timeout * 1000.0)) - - if not socket_settings: - self.sock.setsockopt(SOL_TCP, socket.TCP_NODELAY, 1) - if HAS_TCP_USER_TIMEOUT: - self.sock.setsockopt(SOL_TCP, TCP_USER_TIMEOUT, user_timeout) - return - tcp_opts = self._get_tcp_socket_defaults(self.sock) - tcp_opts.setdefault(socket.TCP_NODELAY, 1) - if HAS_TCP_USER_TIMEOUT: - tcp_opts.setdefault(TCP_USER_TIMEOUT, user_timeout) - tcp_opts.update(socket_settings) - + final_socket_settings = dict(DEFAULT_SOCKET_SETTINGS) + final_socket_settings.update(socket_settings) + tcp_opts.update(final_socket_settings) for opt, val in items(tcp_opts): self.sock.setsockopt(SOL_TCP, opt, val) |