def __server_thread(self): """Thread function to (re)connect active connection to remote host. .. warning:: Do not call this directly, for internal use only. """ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if not is_windows(): sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('', self.remotePort)) sock.listen(1) while True: accept_result = sock.accept() if accept_result is None: continue (self.sock, (_, _)) = accept_result # setup socket self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # make socket nonblocking self.sock.setblocking(0) # start the receiver thread self._start_receiver() sock.close() return
def start(self): """Starts the server and returns. It will launch a listener running in background to wait for incoming connections.""" self.listenSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if not is_windows(): self.listenSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.listenSock.bind(('', self.port)) self.listenSock.listen(1) self.listenSock.setblocking(0) self.listenThread = threading.Thread(target=self._listen_thread, args=(), name="secsgem_hsmsMultiPassiveServer_listenThread_{}".format(self.port)) self.listenThread.start() self.logger.debug("listening")