From 65c2cdbbafcad8032cdc46d2b7d761b0691850d8 Mon Sep 17 00:00:00 2001 From: marcelb Date: Wed, 19 Jul 2023 20:55:17 +0200 Subject: [PATCH] Working on... --- lib/tcp_socket.hpp | 2 +- src/tcp_socket.cpp | 11 ++++++++--- test/client.o | Bin 87368 -> 87368 bytes test/server.o | Bin 79296 -> 79296 bytes 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/tcp_socket.hpp b/lib/tcp_socket.hpp index 4927772..ce5261f 100644 --- a/lib/tcp_socket.hpp +++ b/lib/tcp_socket.hpp @@ -36,7 +36,7 @@ class server { ~server (); // one klijent - client* cli; + client* cli = NULL; void accept(const uint timeout = 100); vector thr; diff --git a/src/tcp_socket.cpp b/src/tcp_socket.cpp index 3b31296..5cdf4e9 100644 --- a/src/tcp_socket.cpp +++ b/src/tcp_socket.cpp @@ -5,7 +5,8 @@ */ server::server (const ushort port, const uint limit, SSL_CTX* _securefds) { - securefds = _securefds; + securefds = _securefds; // dodati parametar red čekanja queue koji će se koristiti kao limit u socketu + // a stavrni limit ćemo korisitit kao broj threadova addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; @@ -33,14 +34,16 @@ server::server (const ushort port, const uint limit, SSL_CTX* _securefds) { } void server::accept(const uint timeout) { + if (cli != NULL) { + cli->~client(); + cli = NULL; + } cli = new client(this, timeout, securefds); } void server::asyncli(const uint limit, void (*handlecli)(client*), const uint timeout) { do { - thr.clear(); - clis.clear(); for (uint i=0; i~client(); } + thr.clear(); + clis.clear(); } while (true); } diff --git a/test/client.o b/test/client.o index dfb73420a905b769d5d9d076cac5a4d4d00ace19..d18a99473b8badad8bf832e53b9a3225f290ac8b 100755 GIT binary patch delta 7752 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

0lE|Dk3+hc;~%nI4cvH5mP1+!!n1Pt1>AXE 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 BtO)=B delta 11831 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