public void Start(int port, System.Threading.CancellationToken token) { _udpThread = new System.Threading.Thread(() => _udpReceiver.ReceiveStuff(token)); _udpThread.Start(); System.Net.Sockets.TcpListener serverSocket = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, port); SocketEventInfo?.Invoke("Listening"); System.Net.Sockets.TcpClient clientSocket = default(System.Net.Sockets.TcpClient); int clientId = 0; serverSocket.Start(); clientId = 0; while (!token.IsCancellationRequested) { clientId += 1; clientSocket = serverSocket.AcceptTcpClient(); _log.Debug($"New TCP Client connected"); System.Threading.Thread thread = new System.Threading.Thread(() => StartServerMessenger(clientSocket, clientId, token)); thread.Start(); } clientSocket.Close(); serverSocket.Stop(); SocketEventInfo?.Invoke("Closed"); }