From 1f960d9f3c66466c10a84fc26d9b852111f2352d Mon Sep 17 00:00:00 2001 From: Bennett Kanuka Date: Sat, 4 Apr 2015 20:11:13 -0400 Subject: [PATCH] Catch interrupted system call Closes #166 --- websockify/websocketproxy.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/websockify/websocketproxy.py b/websockify/websocketproxy.py index 1272755..029b6f3 100755 --- a/websockify/websocketproxy.py +++ b/websockify/websocketproxy.py @@ -11,12 +11,12 @@ as taken from http://docs.python.org/dev/library/ssl.html#certificates ''' -import signal, socket, optparse, time, os, sys, subprocess, logging +import signal, socket, optparse, time, os, sys, subprocess, logging, errno try: from socketserver import ForkingMixIn except: from SocketServer import ForkingMixIn try: from http.server import HTTPServer except: from BaseHTTPServer import HTTPServer -from select import select +import select from websockify import websocket try: from urllib.parse import parse_qs, urlparse @@ -133,7 +133,20 @@ Traffic Legend: if tqueue: wlist.append(target) if cqueue or c_pend: wlist.append(self.request) - ins, outs, excepts = select(rlist, wlist, [], 1) + try: + ins, outs, excepts = select.select(rlist, wlist, [], 1) + except (select.error, OSError): + exc = sys.exc_info()[1] + if hasattr(exc, 'errno'): + err = exc.errno + else: + err = exc[0] + + if err != errno.EINTR: + raise + else: + continue + if excepts: raise Exception("Socket exception") if self.request in outs: