1 #include "otsdaq/NetworkUtilities/TCPServer.h"
4 #include "otsdaq/NetworkUtilities/TCPTransceiverSocket.h"
10 TCPServer::TCPServer(
unsigned int serverPort,
unsigned int maxNumberOfClients)
11 :
TCPServerBase(serverPort, maxNumberOfClients), fInDestructor(false)
14 fReceiveTimeout.tv_sec = 0;
15 fReceiveTimeout.tv_usec = 0;
16 fSendTimeout.tv_sec = 0;
17 fSendTimeout.tv_usec = 0;
23 TCPServer::~TCPServer(
void) { fInDestructor =
true; }
38 message = socket->receivePacket();
40 catch(
const std::exception& e)
44 std::cout << __PRETTY_FUNCTION__ <<
"Error client socket #"
45 << socket->getSocketId() <<
": " << e.what()
47 TCPServerBase::closeClientSocket(socket->getSocketId());
48 interpretMessage(
"Error: " + std::string(e.what()));
56 std::string messageToClient = interpretMessage(message);
59 if(messageToClient !=
"")
63 socket->sendPacket(messageToClient);
72 std::cout << __PRETTY_FUNCTION__
73 <<
"Thread done for socket #: " << socket->getSocketId() << std::endl;
78 void TCPServer::acceptConnections()
86 clientSocket->setReceiveTimeout(fReceiveTimeout.tv_sec,
87 fReceiveTimeout.tv_usec);
88 clientSocket->setSendTimeout(fSendTimeout.tv_sec, fSendTimeout.tv_usec);
89 if(fConnectedClientsFuture.find(clientSocket->getSocketId()) !=
90 fConnectedClientsFuture.end())
91 fConnectedClientsFuture.erase(
92 fConnectedClientsFuture.find(clientSocket->getSocketId()));
93 fConnectedClientsFuture.emplace(
94 clientSocket->getSocketId(),
96 std::launch::async, &TCPServer::connectClient,
this, clientSocket));
109 void TCPServer::setReceiveTimeout(
unsigned int timeoutSeconds,
110 unsigned int timeoutMicroseconds)
112 fReceiveTimeout.tv_sec = timeoutSeconds;
113 fReceiveTimeout.tv_usec = timeoutMicroseconds;
117 void TCPServer::setSendTimeout(
unsigned int timeoutSeconds,
118 unsigned int timeoutMicroseconds)
120 fSendTimeout.tv_sec = timeoutSeconds;
121 fSendTimeout.tv_usec = timeoutMicroseconds;
A class that can read/write to a socket.