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 d8acb4f..545fa1c 100644 --- a/tests/test_websocket.py +++ b/tests/test_websocket.py @@ -324,8 +324,9 @@ class WebSocketServerTestCase(unittest.TestCase): 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 @@ class WebSocketServerTestCase(unittest.TestCase): 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 16e1dc4..b146eeb 100644 --- a/websockify/websocket.py +++ b/websockify/websocket.py @@ -723,8 +723,11 @@ class WebSocketServer(object): 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)