diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2024-04-25 11:52:21 +0300 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2024-04-25 17:17:22 +0300 |
commit | 70e9d631f044d6619ae1f9da4847373a4f3319f5 (patch) | |
tree | 2e6860e813f7a66b0e9f6cba3696d5d6ff32c721 | |
parent | 502bc9233ec80c77fa823f74d7f461b9cfaf5707 (diff) |
TcpServer: code style fixes
Change-Id: If6eeefbc3d7c77fc5e43489f9af48073b68c9d88
Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
-rw-r--r-- | src/libs/qlicenseservice/tcpserver.cpp | 79 | ||||
-rw-r--r-- | src/libs/qlicenseservice/tcpserver.h | 33 |
2 files changed, 57 insertions, 55 deletions
diff --git a/src/libs/qlicenseservice/tcpserver.cpp b/src/libs/qlicenseservice/tcpserver.cpp index 9924d42..bb128ce 100644 --- a/src/libs/qlicenseservice/tcpserver.cpp +++ b/src/libs/qlicenseservice/tcpserver.cpp @@ -16,7 +16,7 @@ using namespace QLicenseCore; namespace QLicenseService { TcpServer::TcpServer() - : m_running(false) + : m_running(false) { FD_ZERO(&m_readfds); } @@ -30,13 +30,14 @@ TcpServer::~TcpServer() doCloseSocket(socket.second); } - -void TcpServer::start() { +void TcpServer::start() +{ m_thread = std::thread(&TcpServer::run, this); m_running = true; } -void TcpServer::stop() { +void TcpServer::stop() +{ if (!m_running) return; @@ -130,34 +131,35 @@ void TcpServer::run() const auto clientSockets = m_clientSockets; for (auto socket : clientSockets) { - if (FD_ISSET(socket.second, &m_readfds)) { - // Check if it was for closing , and also read the - // incoming message - #ifdef _WIN32 - int bytesRead = recv(socket.second, m_buffer, sizeof(m_buffer), 0); - #else - int bytesRead = read(socket.second, m_buffer, sizeof(m_buffer)); - #endif - if (bytesRead == -1) { - #ifdef _WIN32 - // Remote side executed hard close - if (WSAGetLastError() == WSAECONNRESET) - closeClientSocket(socket.first); - #endif - } else if (bytesRead == 0) { - // Graceful shutdown, remove the socket from the monitored set and close it - closeClientSocket(socket.first); - } else if (bytesRead > 0) { - std::lock_guard<std::mutex> lock(m_mutex); + if (!FD_ISSET(socket.second, &m_readfds)) + continue; - TcpMessage msg; - msg.socketId = socket.first; - msg.message = std::string(m_buffer, bytesRead); - m_messages.push_back(msg); - - Pipe::globalObject()->write(PIPE_MSG_READY_READ, - Pipe::Type::TcpServer, std::to_string(msg.socketId)); - } + // Check if it was for closing , and also read the + // incoming message +#ifdef _WIN32 + int bytesRead = recv(socket.second, m_buffer, sizeof(m_buffer), 0); +#else + int bytesRead = read(socket.second, m_buffer, sizeof(m_buffer)); +#endif + if (bytesRead == -1) { +#ifdef _WIN32 + // Remote side executed hard close + if (WSAGetLastError() == WSAECONNRESET) + closeClientSocket(socket.first); +#endif + } else if (bytesRead == 0) { + // Graceful shutdown, remove the socket from the monitored set and close it + closeClientSocket(socket.first); + } else if (bytesRead > 0) { + std::lock_guard<std::mutex> lock(m_mutex); + + TcpMessage msg; + msg.socketId = socket.first; + msg.message = std::string(m_buffer, bytesRead); + m_messages.push_back(msg); + + Pipe::globalObject()->write(PIPE_MSG_READY_READ, + Pipe::Type::TcpServer, std::to_string(msg.socketId)); } } } @@ -231,7 +233,8 @@ void TcpServer::doCloseSocket(type_socket &socketFD) #endif } -bool TcpServer::createListeningSocket(type_socket &listeningSocket, uint16_t port) { +bool TcpServer::createListeningSocket(type_socket &listeningSocket, uint16_t port) +{ // Create a master socket if ((listeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == 0) { logError("Socket creation failed %s", strerror(errno)); @@ -241,18 +244,15 @@ bool TcpServer::createListeningSocket(type_socket &listeningSocket, uint16_t por // Set master socket to allow multiple connections int opt = TRUE; #ifdef _WIN32 - if (setsockopt(listeningSocket, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *)&opt, - sizeof(opt)) < 0) { + if (setsockopt(listeningSocket, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *)&opt, sizeof(opt)) < 0) { #else - if (setsockopt(listeningSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, - sizeof(opt)) < 0) { + if (setsockopt(listeningSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(opt)) < 0) { #endif logError("setsockopt failed: %s", strerror(errno)); return false; } - timeval tv {0, 0}; //t.tv_sec = 0; t.tv_usec = 0; - int ret = setsockopt(listeningSocket, SOL_SOCKET, SO_RCVTIMEO, - (char*)&tv, sizeof(timeval)); + timeval tv {0, 0}; // t.tv_sec = 0; t.tv_usec = 0; + int ret = setsockopt(listeningSocket, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(timeval)); if (ret < 0) { logError("Socket timeout"); return false; @@ -280,5 +280,4 @@ bool TcpServer::createListeningSocket(type_socket &listeningSocket, uint16_t por return true; } - } // namespace QLicenseService diff --git a/src/libs/qlicenseservice/tcpserver.h b/src/libs/qlicenseservice/tcpserver.h index 924a8c4..7a1c52f 100644 --- a/src/libs/qlicenseservice/tcpserver.h +++ b/src/libs/qlicenseservice/tcpserver.h @@ -39,14 +39,14 @@ namespace QLicenseService { - -struct TcpMessage { +struct TcpMessage +{ uint16_t socketId; std::string message; }; -class TcpServer { - +class TcpServer +{ public: TcpServer(); ~TcpServer(); @@ -54,31 +54,34 @@ public: bool init(uint16_t &serverPort, bool findFreePort = false); void start(); void stop(); + int sendResponse(uint16_t socketId, const std::string &message); void closeClientSocket(uint16_t socketId); bool dataAvailable(); std::string receive(uint16_t &socketId); private: - type_socket m_masterSocket; + void run(); + void doCloseSocket(type_socket &socketFD); + bool generateSocketId(uint16_t &index); + + bool createListeningSocket(type_socket &listeningSocket, uint16_t port); - bool m_running = false; +private: + type_socket m_masterSocket; // <(unique)socket_id, socket_fd>, descriptor numbers can be reused std::unordered_map<uint16_t, type_socket> m_clientSockets; - char m_buffer[BUFFER_SIZE]; // data buffer fd_set m_readfds; // set of socket descriptors struct sockaddr_in m_address; + + bool m_running; + char m_buffer[BUFFER_SIZE]; + + std::deque<TcpMessage> m_messages; + std::thread m_thread; std::mutex m_mutex; std::condition_variable m_condvar; - std::deque<TcpMessage> m_messages; - bool m_findFreePort; - - void run(); - void doCloseSocket(type_socket &socketFD); - bool generateSocketId(uint16_t &index); - - bool createListeningSocket(type_socket &listeningSocket, uint16_t port); }; } // namespace QLicenseService |