aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2024-04-25 11:52:21 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2024-04-25 17:17:22 +0300
commit70e9d631f044d6619ae1f9da4847373a4f3319f5 (patch)
tree2e6860e813f7a66b0e9f6cba3696d5d6ff32c721
parent502bc9233ec80c77fa823f74d7f461b9cfaf5707 (diff)
TcpServer: code style fixes
Change-Id: If6eeefbc3d7c77fc5e43489f9af48073b68c9d88 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
-rw-r--r--src/libs/qlicenseservice/tcpserver.cpp79
-rw-r--r--src/libs/qlicenseservice/tcpserver.h33
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