diff --git a/runserver/__main__.py b/runserver/__main__.py
index 15881cc3dcb4992ab13188281b68c56e28c7a3b2..ac16d16a47870392b5af7212387f04fa91cfd1ad 100644
--- a/runserver/__main__.py
+++ b/runserver/__main__.py
@@ -3,11 +3,9 @@ def tesserver():
     app.config['ENABLELAUNCH'] = True
     from flask_cors import CORS, cross_origin
     CORS(app, supports_credentials=True, origin="*")
-    print("try to run tesserver")
     app.run(host='localhost',debug=False,port=8080)
-    print('app is running')
 
-def tws():
+def tws(stop=None):
     from twsproxy import server
     import sys
     import os
@@ -19,21 +17,29 @@ def tws():
             port = int(sys.argv[1])
         except:
             port = 8090
-    server = server.TWSServer(port,5)
-    logger.debug("initialised server object")
+    server = server.TWSServer(port,5,stop)
     server.run()
 
+def stopThreads(signum,frame,event,old_handler):
+    import logging
+    logger = logging.getLogger()
+    event.set()
+    if callable(old_handler):
+        old_handler(signum,frame)
+    return
 
 def main():
     import logging
+    import signal
     logging.basicConfig(filename="tes.log",format="%(asctime)s %(levelname)s:%(process)s: %(message)s")
     logger=logging.getLogger()
     logger.setLevel(logging.DEBUG)
+    old_handler = signal.getsignal(signal.SIGINT)
+    signal.signal(signal.SIGINT, lambda x,y: stopThreads(x,y,stop,old_handler))
     import threading
-    print("create thread")
-    twsthread = threading.Thread(target=tws)
+    stop=threading.Event()
+    twsthread = threading.Thread(target=tws,args=[stop])
     twsthread.start()
-    print("thread started")
     tesserver()
     twsthread.join()
 
diff --git a/twsproxy/__init__.py b/twsproxy/__init__.py
index 6051cc4a6ce3ecf6db587e3d0ef5158b0d13f23c..4f4492df9b4cb75363ee646ec246bb12e1ed83dc 100644
--- a/twsproxy/__init__.py
+++ b/twsproxy/__init__.py
@@ -126,55 +126,6 @@ class TWSProxy(threading.Thread):
                 raise RuntimeError("socket connection broken")
             totalsent = totalsent + sent
 
-    @staticmethod
-    def twosocks(client,server,initshutdown):
-        import threading
-        logger=logging.getLogger()
-        closed = False
-        clientopen = True
-        serveropen = True
-        shuttype = socket.SHUT_RD
-        while serveropen or clientopen:
-            r,w,e = select.select([client,server],[],[],TWSProxy.TIMEOUT)
-            if client in r:
-                try:
-                    buff = client.recv(TWSProxy.MAXBUFF)
-                    msglength = len(buff)
-                    if msglength > 0:
-                        TWSProxy.reliablesend(server,buff,msglength)
-                    else:
-                        clientopen = False
-                        server.shutdown(shuttype)
-                except:
-                        clientopen = False
-            if server in r:
-                try:
-                    buff = server.recv(TWSProxy.MAXBUFF)
-                    msglength = len(buff)
-                    if msglength > 0:
-                        TWSProxy.reliablesend(client,buff,msglength)
-                    else:
-                        client.shutdown(shuttype)
-#                        print("server closed socket for reading")
-                        serveropen = False
-                except:
-                        serveropen = False
-        # If the client has finished sending, and we've finished transmitting to the server
-        # The server may still have some data to transmit to the client
-        closed = False
-        while not closed:
-            r,w,e = select.select([server],[],[],TWSProxy.TIMEOUT)
-            buff = server.recv(TWSProxy.MAXBUFF)
-            msglength = len(buff)
-            if msglength > 0:
-                try:
-                    TWSProxy.reliablesend(client,buff,msglength)
-                except BrokenPipeError as e:
-                    pass
-            else:
-                closed = True
-
-
 
     @staticmethod
     def sockcopy(src,dest,initshutdown):
diff --git a/twsproxy/server/__init__.py b/twsproxy/server/__init__.py
index 6417d4de6d188fd5e5e6e3d714872d8287bcebbb..5c522f0c30f27fecfd02e10e8e220ee6312a43b9 100644
--- a/twsproxy/server/__init__.py
+++ b/twsproxy/server/__init__.py
@@ -4,24 +4,24 @@ import logging
 class TWSServer:
     import socket
 
-    def __init__(self,port,maxconn):
+    def __init__(self,port,maxconn,stop=None):
         self.port = port
-        print('init tws proxy')
-        print(port)
         self.maxconn = maxconn
+        if stop is None:
+            self.stop = threading.Event()
+        else:
+            self.stop = stop
 
     def run(self):
         logger = logging.getLogger()
         serversocket = socket.socket(
                     socket.AF_INET, socket.SOCK_STREAM)
-        print(serversocket)
+        serversocket.settimeout(5)
         #bind the socket to a public host,
         # and a well-known port
         for port in range(self.port,self.port+1):
             try:
-                print('try bind to {}'.format(port))
                 serversocket.bind(('0.0.0.0', port))
-                print("bind success")
         #become a server socket
                 serversocket.listen(self.maxconn)
                 break
@@ -30,8 +30,11 @@ class TWSServer:
                 print(e)
                 pass
         openconnections = []
-        while 1:
-            (clientsocket, address) = serversocket.accept()
+        while not self.stop.is_set():
+            try:
+                (clientsocket, address) = serversocket.accept()
+            except socket.timeout:
+                continue
             clientsocket.setblocking(True)
             tunnel = TWSProxy(clientsocket)
             tunnel.daemon = True
@@ -42,3 +45,4 @@ class TWSServer:
                     c.join()
                     openconnections.remove(c)
 
+        serversocket.close()