From b56f32f64aedb1169235b200fd594dcaa31b26f9 Mon Sep 17 00:00:00 2001 From: Krzyhau Date: Sun, 8 Sep 2024 11:56:15 +0200 Subject: [PATCH] fix: dispose tas controller connections --- src/Features/Tas/TasProtocol.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Features/Tas/TasProtocol.cpp b/src/Features/Tas/TasProtocol.cpp index 8a806273..b3c59043 100644 --- a/src/Features/Tas/TasProtocol.cpp +++ b/src/Features/Tas/TasProtocol.cpp @@ -370,7 +370,8 @@ static bool receiveFromConnection(TasProtocol::ConnectionData &cl) { int len = recv(cl.sock, buf, sizeof buf, 0); if (len == 0 || len == SOCKET_ERROR) { // Connection closed or errored - return false; + closesocket(cl.sock); + return false; } cl.cmdbuf.insert(cl.cmdbuf.end(), std::begin(buf), std::begin(buf) + len); @@ -561,6 +562,7 @@ static void mainThread() { for (auto &cl : g_connections) { closesocket(cl.sock); } + g_connections.clear(); closesocket(g_listen_sock); WSACleanup(); @@ -710,12 +712,22 @@ CON_COMMAND(sar_tas_protocol_server, return console->Print(sar_tas_protocol_server.ThisPtr()->m_pszHelpString); } g_conn_data_mutex.lock(); - g_server_port = args.ArgC() >= 2 ? std::atoi(args[1]) : DEFAULT_TAS_SERVER_SOCKET; - g_conn_data_mutex.unlock(); - g_is_server.store(true); + int server_port = args.ArgC() >= 2 ? std::atoi(args[1]) : DEFAULT_TAS_SERVER_SOCKET; + bool should_start_server = !g_running || g_server_port != server_port; - restart(); + if (should_start_server) { + g_server_port = server_port; + g_is_server.store(true); + } + + g_conn_data_mutex.unlock(); + + if (should_start_server) { + restart(); + } else { + console->Print("TAS server is already running on port %d.\n", server_port); + } } CON_COMMAND(sar_tas_protocol_stop,