From 325e4efe004af9bfe832a269caae4cb637f753bf Mon Sep 17 00:00:00 2001 From: Thomas Goirand Date: Mon, 10 Oct 2016 12:06:49 +0200 Subject: [PATCH] TCP_KEEPCNT doesn't exist in non-linux The TCP_KEEPCNT option for sockets only work with the Linux kernel, this isn't available for example in FreeBSD and Hurd, which makes the package fail to build on these platforms. See Debian bug here: https://bugs.debian.org/840035 --- tests/test_websocket.py | 10 ++++++---- websockify/websocket.py | 7 +++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/tests/test_websocket.py b/tests/test_websocket.py index d8acb4ff..545fa1c2 100644 --- a/tests/test_websocket.py +++ b/tests/test_websocket.py @@ -324,8 +324,9 @@ def test_socket_set_keepalive_options(self): tcp_keepidle=keepidle, tcp_keepintvl=keepintvl) - self.assertEqual(sock.getsockopt(socket.SOL_TCP, - socket.TCP_KEEPCNT), keepcnt) + if hasattr(socket, 'TCP_KEEPCNT'): + self.assertEqual(sock.getsockopt(socket.SOL_TCP, + socket.TCP_KEEPCNT), keepcnt) self.assertEqual(sock.getsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE), keepidle) self.assertEqual(sock.getsockopt(socket.SOL_TCP, @@ -337,8 +338,9 @@ def test_socket_set_keepalive_options(self): tcp_keepidle=keepidle, tcp_keepintvl=keepintvl) - self.assertNotEqual(sock.getsockopt(socket.SOL_TCP, - socket.TCP_KEEPCNT), keepcnt) + if hasattr(socket, 'TCP_KEEPCNT'): + self.assertNotEqual(sock.getsockopt(socket.SOL_TCP, + socket.TCP_KEEPCNT), keepcnt) self.assertNotEqual(sock.getsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE), keepidle) self.assertNotEqual(sock.getsockopt(socket.SOL_TCP, diff --git a/websockify/websocket.py b/websockify/websocket.py index 16e1dc49..b146eeb0 100644 --- a/websockify/websocket.py +++ b/websockify/websocket.py @@ -723,8 +723,11 @@ def socket(host, port=None, connect=False, prefer_ipv6=False, if tcp_keepalive: sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) if tcp_keepcnt: - sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT, - tcp_keepcnt) + if hasattr(socket, 'TCP_KEEPCNT'): + sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT, + tcp_keepcnt) + else: + self.msg('tcp_keepcnt not available on your system') if tcp_keepidle: sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, tcp_keepidle)