diff options
Diffstat (limited to 'src/libs/qlicenseservice/tcpserver.cpp')
-rw-r--r-- | src/libs/qlicenseservice/tcpserver.cpp | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/src/libs/qlicenseservice/tcpserver.cpp b/src/libs/qlicenseservice/tcpserver.cpp index 330ad07..565f43a 100644 --- a/src/libs/qlicenseservice/tcpserver.cpp +++ b/src/libs/qlicenseservice/tcpserver.cpp @@ -8,6 +8,20 @@ namespace QLicenseService { TcpServer::TcpServer(uint16_t serverPort) + : m_serverPort(serverPort) +{ +} + +TcpServer::~TcpServer() +{ + doCloseSocket(m_masterSocket); + for (type_socket sd: m_clientSocket) { + doCloseSocket(sd); + } + m_clientSocket.clear(); +} + +bool TcpServer::init() { int opt = TRUE; @@ -18,19 +32,19 @@ TcpServer::TcpServer(uint16_t serverPort) iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != NO_ERROR) { wprintf(L"Error at WSAStartup()\n"); - exit(EXIT_FAILURE); + return false; } #endif // Create a master socket if ((m_masterSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == 0) { perror("socket failed"); - exit(EXIT_FAILURE); + return false; } // Set master socket to allow multiple connections if (setsockopt(m_masterSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(opt)) < 0) { perror("setsockopt failed"); - exit(EXIT_FAILURE); + return false; } timeval tv {1, 0}; //t.tv_sec = 2; t.tv_usec = 0; int ret = setsockopt(m_masterSocket, SOL_SOCKET, SO_RCVTIMEO, @@ -43,42 +57,31 @@ TcpServer::TcpServer(uint16_t serverPort) // Type of socket created m_address.sin_family = AF_INET; m_address.sin_addr.s_addr = INADDR_ANY; - m_address.sin_port = htons(serverPort); + m_address.sin_port = htons(m_serverPort); // Bind the socket to localhost if (bind(m_masterSocket, (struct sockaddr *)&m_address, sizeof(m_address)) < 0) { doCloseSocket(m_masterSocket); perror("bind failed"); - exit(EXIT_FAILURE); + return false; } - std::cout << "Listening to port " << serverPort << std::endl; + std::cout << "Listening to port " << m_serverPort << std::endl; //ioctlsocket(m_masterSocket, FIONBIO, &mode); // Try to specify maximum of 3 pending connections for the master socket if (listen(m_masterSocket, 3) < 0) { doCloseSocket(m_masterSocket); perror("listen"); - exit(EXIT_FAILURE); + return false; } m_addrlen = sizeof(m_address); // Accept the incoming connection std::cout << "Waiting for connections ...\n"; + return true; } -TcpServer::~TcpServer() +bool TcpServer::listenToClients(uint16_t &socketId, std::string *data) { - doCloseSocket(m_masterSocket); - for (type_socket sd: m_clientSocket) { - doCloseSocket(sd); - } - m_clientSocket.clear(); -} - - -std::string TcpServer::listenToClients(uint16_t &socketId) -{ - std::string data; - // Clear the socket set FD_ZERO(&m_readfds); @@ -111,7 +114,7 @@ std::string TcpServer::listenToClients(uint16_t &socketId) if ((new_socket = accept(m_masterSocket, (struct sockaddr *)&m_address, (socklen_t *)&m_addrlen)) < 0) { perror("accept"); - exit(EXIT_FAILURE); + return false; } // Add new socket to set of sockets m_clientSocket.insert(new_socket); @@ -133,17 +136,17 @@ std::string TcpServer::listenToClients(uint16_t &socketId) getpeername(sd, (struct sockaddr *)&m_address, (socklen_t *)&m_addrlen); socketId = sd; - data = SOCKET_CLOSED_MSG; + *data = SOCKET_CLOSED_MSG; } else { // Set the string terminating NULL byte // on the end of the data read m_buffer[valread] = '\0'; socketId = sd; - data = m_buffer; + *data = m_buffer; } } } - return data; + return true; } int TcpServer::sendResponse(int socketId, const std::string &message) |