diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog index 76b2a96..182af7b 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog index 1d6b058..e73b1e9 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog index 18eafe6..39de28d 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog index 2d168be..380c163 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog index 37a6441..3492792 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog index 8151521..3565fb1 100644 Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog differ diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/unsuccessfulbuild deleted file mode 100644 index e69de29..0000000 diff --git a/include/Defs.hpp b/include/Defs.hpp index ec596ab..cca3cb3 100644 --- a/include/Defs.hpp +++ b/include/Defs.hpp @@ -245,4 +245,12 @@ enum InternalTags #define IS_HANDSHAKE(name) name.subject == 1 || (name.tag == DisconnectTag || name.tag == ConnectTag || name.tag == Accept || name.tag == Close || name.tag == Reject) +#ifdef __linux__ +#include +#include +#include +#include +void closesocket(int socket) { close(socket); } +#endif + #endif // DEFS_HPP \ No newline at end of file diff --git a/include/TcpClient.hpp b/include/TcpClient.hpp index c6d8766..57907bc 100644 --- a/include/TcpClient.hpp +++ b/include/TcpClient.hpp @@ -57,6 +57,7 @@ private: const NetworkBuffer &receive_data_array(); static void receive_data(TcpClient *client); static bool send_network_message(const NetworkMessage &message, TcpClient *client); + static void close_connection(TcpClient *client); bool initialize(const std::string &ip, uint16 port = default_client_port); diff --git a/src/TcpClient.cpp b/src/TcpClient.cpp index b9b6b06..ef80498 100644 --- a/src/TcpClient.cpp +++ b/src/TcpClient.cpp @@ -60,8 +60,13 @@ void TcpClient::receive_data(TcpClient *client) { if (message.tag == ConnectTag) // some user has connected - not us, never std::async(std::launch::async, client->OnConnect, message.sender); - else if (message.tag == DisconnectTag || message.tag == Close) // some user has disconnected, it can be us + else if (message.tag == DisconnectTag) // some user has disconnected, it can be us std::async(std::launch::async, client->OnDisconnect, message.sender); + else if (message.tag == Close) + { + std::async(std::launch::async, client->OnDisconnect, message.sender); + close_connection(client); + } } else std::async(std::launch::async, client->OnMessage, message.sender, message.tag, message.subject, message.data); // we received data @@ -228,6 +233,12 @@ bool TcpClient::send_network_message(const NetworkMessage &message, TcpClient *c return bytes_sent == SOCKET_ERROR || bytes_sent != lenght || WSAGetLastError() != 0; } +void TcpClient::close_connection(TcpClient * client) +{ + shutdown(client->tcp_socket, SD_BOTH); + closesocket(client->tcp_socket); +} + bool TcpClient::SendBytes(const std::vector& bytes) { int32 bytes_sent = send(tcp_socket, reinterpret_cast(bytes.data()), bytes.size(), 0); diff --git a/src/TcpServer.cpp b/src/TcpServer.cpp index 836ce43..07a8163 100644 --- a/src/TcpServer.cpp +++ b/src/TcpServer.cpp @@ -10,13 +10,13 @@ TcpServer::TcpServer() { initialize(); // initialize with the default port - clients = std::vector(max_connections); + clients.reserve(max_connections); } TcpServer::TcpServer(uint16 port) { initialize(port); - clients = std::vector(max_connections); + clients.reserve(max_connections); } TcpServer::~TcpServer()