diff --git a/src/logic/scripting/lua/libs/libnetwork.cpp b/src/logic/scripting/lua/libs/libnetwork.cpp index 304cf5c8..678d46f2 100644 --- a/src/logic/scripting/lua/libs/libnetwork.cpp +++ b/src/logic/scripting/lua/libs/libnetwork.cpp @@ -73,7 +73,7 @@ static int l_connect(lua::State* L) { static int l_close(lua::State* L) { u64id_t id = lua::tointeger(L, 1); if (auto connection = engine->getNetwork().getConnection(id)) { - connection->close(); + connection->close(true); } return 0; } diff --git a/src/network/Network.cpp b/src/network/Network.cpp index 7a99b0c5..24cfe718 100644 --- a/src/network/Network.cpp +++ b/src/network/Network.cpp @@ -400,10 +400,15 @@ public: return readBatch.size(); } - void close() override { - if (state != ConnectionState::CLOSED) { - shutdown(descriptor, 2); - closesocket(descriptor); + void close(bool discardAll=false) override { + { + std::lock_guard lock(mutex); + readBatch.clear(); + + if (state != ConnectionState::CLOSED) { + shutdown(descriptor, 2); + closesocket(descriptor); + } } if (thread) { thread->join(); diff --git a/src/network/Network.hpp b/src/network/Network.hpp index 0cc0803c..83244094 100644 --- a/src/network/Network.hpp +++ b/src/network/Network.hpp @@ -49,7 +49,7 @@ namespace network { virtual void connect(runnable callback) = 0; virtual int recv(char* buffer, size_t length) = 0; virtual int send(const char* buffer, size_t length) = 0; - virtual void close() = 0; + virtual void close(bool discardAll=false) = 0; virtual int available() = 0; virtual size_t pullUpload() = 0;