tdaq-develop-2025-02-12
TCPReceiverSocket.h
1 #ifndef _TCPReceiverSocket_h_
2 #define _TCPReceiverSocket_h_
3 
4 #include <chrono>
5 #include <string>
6 #include "otsdaq/NetworkUtilities/TCPPacket.h"
7 #include "otsdaq/NetworkUtilities/TCPSocket.h"
8 
9 namespace ots
10 {
11 class TCPReceiverSocket : public virtual TCPSocket
12 {
13  public:
14  TCPReceiverSocket(int socketId = invalidSocketId);
15  virtual ~TCPReceiverSocket();
16  // TCPReceiverSocket(TCPReceiverSocket const&) = delete ;
17  TCPReceiverSocket(TCPReceiverSocket&& theTCPReceiverSocket) = default;
18 
19  template<class T>
20  T receive(void)
21  {
22  T buffer;
23  buffer.resize(maxSocketSize);
24  int length = receive(static_cast<char*>(&buffer.at(0)), maxSocketSize);
25  if(length == -1)
26  length = 0;
27  buffer.resize(length);
28  // std::cout << __PRETTY_FUNCTION__ << "Message received-" << fBuffer << "-" <<
29  // std::endl;
30  return buffer;
31  }
32  std::string receivePacket(
33  std::chrono::milliseconds timeout = std::chrono::milliseconds(5));
34  void setReceiveTimeout(unsigned int timeoutSeconds, unsigned int timeoutMicroSeconds);
35 
36  private:
37  int receive(char* buffer,
38  std::size_t bufferSize = maxSocketSize,
39  int timeoutMicroSeconds = -1);
40  static constexpr unsigned int maxSocketSize = 65536;
41 };
42 } // namespace ots
43 #endif