From ff07d6dcdf90e7d2f430eed39bfe11d49de427df Mon Sep 17 00:00:00 2001 From: AfonsoCMSousa Date: Wed, 7 Jan 2026 22:40:22 +0000 Subject: [PATCH] fix: finnaly working! --- PlayerTracker | Bin 815592 -> 816648 bytes include/net.hpp | 3 ++- source/net.cpp | 32 +++++++++++++++++--------------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/PlayerTracker b/PlayerTracker index d85c4b9d441cc589fb1721d18c281ccbbdc402f6..049667a96e2f37d1acc6bf70886d76fec9980feb 100755 GIT binary patch delta 36720 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 M#3d?}W_ct24XvP(NB{r; diff --git a/include/net.hpp b/include/net.hpp index 6cce6cb..8ca3841 100644 --- a/include/net.hpp +++ b/include/net.hpp @@ -16,7 +16,8 @@ using namespace std; class Socket { private: // Socket file descriptor - int sock; + int sock_server; + int sock_unix; struct sockaddr_in server_addr; struct sockaddr_un server_addr_unix; diff --git a/source/net.cpp b/source/net.cpp index ebd30ca..c0b0151 100644 --- a/source/net.cpp +++ b/source/net.cpp @@ -2,8 +2,9 @@ #include Socket::Socket() { - sock = socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { + sock_server = socket(AF_INET, SOCK_DGRAM, 0); + sock_unix = -1; + if (sock_server < 0) { throw runtime_error("Failed to create socket"); } memset(&server_addr, 0, sizeof(server_addr)); @@ -11,7 +12,8 @@ Socket::Socket() { } Socket::~Socket() { - close(sock); + close(sock_server); + close(sock_unix); } void Socket::connect_server(const char *ip, uint16_t port) { @@ -23,51 +25,51 @@ void Socket::connect_server(const char *ip, uint16_t port) { // Connect to existing UNIX domain socket (e.g., /tmp/socket_path) void Socket::connect_unix(const char *ip, uint16_t port) { - sock = socket(AF_UNIX, SOCK_STREAM, 0); - if (sock < 0) { + sock_unix = socket(AF_UNIX, SOCK_STREAM, 0); + if (sock_unix < 0) { throw std::runtime_error("Failed to create UNIX socket"); } this->server_addr_unix.sun_family = AF_UNIX; strncpy(this->server_addr_unix.sun_path, ip, sizeof(this->server_addr_unix.sun_path) - 1); - printf("Connecting to UNIX socket at %s\n", ip); + printf("Connecting to UNIX socket at %s\n", ip); - if (connect(sock, (struct sockaddr *)&server_addr_unix, sizeof(server_addr_unix)) < 0) { + if (connect(sock_unix, (struct sockaddr *)&server_addr_unix, sizeof(server_addr_unix)) < 0) { throw std::runtime_error("Failed to connect to UNIX socket"); } } void Socket::send_server() { - ssize_t sent_bytes = sendto(sock, &packet_data, sizeof(packet_data), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); + ssize_t sent_bytes = sendto(sock_server, &packet_data, sizeof(packet_data), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (sent_bytes < 0) { throw runtime_error("Failed to send data"); } } void Socket::send_unix() { - ssize_t sent_bytes = send(sock, &packet_data, sizeof(packet_data), 0); + ssize_t sent_bytes = send(sock_unix, &packet_data, sizeof(packet_data), 0); if (sent_bytes < 0) { throw runtime_error("Failed to send data to UNIX socket"); } } void Socket::send_server(const api_packet &data) { - ssize_t sent_bytes = sendto(sock, &data, sizeof(data), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); + ssize_t sent_bytes = sendto(sock_server, &data, sizeof(data), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (sent_bytes < 0) { throw runtime_error("Failed to send data"); } } void Socket::send_server(const void *data, size_t len) { - ssize_t sent_bytes = sendto(sock, data, len, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); - if (sent_bytes < 0) { - throw runtime_error("Failed to send data"); - } + ssize_t sent_bytes = sendto(sock_server, data, len, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); + if (sent_bytes < 0) { + throw runtime_error("Failed to send data"); + } } void Socket::send_unix(const api_packet &data) { - ssize_t sent_bytes = send(sock, &data, sizeof(data), 0); + ssize_t sent_bytes = send(sock_unix, &data, sizeof(data), 0); if (sent_bytes < 0) { throw runtime_error("Failed to send data to UNIX socket"); }