Skip to content
Snippets Groups Projects
__init__.py 1.54 KiB
Newer Older
import socket
from .. import TWSProxy
class TWSServer:
    import socket

    def __init__(self,port,maxconn,stop=None):
Chris Hines's avatar
Chris Hines committed
        import threading
        self.port = port
        self.maxconn = maxconn
        if stop is None:
            self.stop = threading.Event()
        else:
            self.stop = stop

    def run(self):
        serversocket = socket.socket(
                    socket.AF_INET, socket.SOCK_STREAM)
        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:
                serversocket.bind(('0.0.0.0', port))
        #become a server socket
                serversocket.listen(self.maxconn)
                break
            except Exception as e:
                print("bind fail")
                print(e)
                pass
        openconnections = []
        while not self.stop.is_set():
            try:
                (clientsocket, address) = serversocket.accept()
Chris Hines's avatar
Chris Hines committed
                logger.debug('accepted connection {}'.format(clientsocket))
            except socket.timeout:
                continue
            clientsocket.setblocking(True)
            tunnel = TWSProxy(clientsocket)
            tunnel.daemon = True
            tunnel.start()
            openconnections.append(tunnel)
            for c in openconnections:
                if not c.is_alive():
                    c.join()
                    openconnections.remove(c)

        serversocket.close()