otsdaq  v2_03_00
ReceiverSocket.h
1 #ifndef _ots_ReceiverSocket_h_
2 #define _ots_ReceiverSocket_h_
3 
4 #include "otsdaq-core/NetworkUtilities/Socket.h"
5 
6 #include <mutex> //for std::mutex
7 #include <string>
8 #include <vector>
9 
10 namespace ots
11 {
12 class ReceiverSocket : public virtual Socket
13 {
14  // TransceiverSocket is a "Friend" class of ReceiverSocket so has access to private
15  // members.
16  friend class TransceiverSocket;
17 
18  public:
19  ReceiverSocket(std::string IPAddress, unsigned int port = 0);
20  virtual ~ReceiverSocket(void);
21 
22  int receive(std::string& buffer,
23  unsigned int timeoutSeconds = 1,
24  unsigned int timeoutUSeconds = 0,
25  bool verbose = false);
26  int receive(std::vector<uint32_t>& buffer,
27  unsigned int timeoutSeconds = 1,
28  unsigned int timeoutUSeconds = 0,
29  bool verbose = false);
30  int receive(std::string& buffer,
31  unsigned long& fromIPAddress,
32  unsigned short& fromPort,
33  unsigned int timeoutSeconds = 1,
34  unsigned int timeoutUSeconds = 0,
35  bool verbose = false);
36  int receive(std::vector<uint32_t>& buffer,
37  unsigned long& fromIPAddress,
38  unsigned short& fromPort,
39  unsigned int timeoutSeconds = 1,
40  unsigned int timeoutUSeconds = 0,
41  bool verbose = false);
42 
43  protected:
44  ReceiverSocket(void);
45 
46  private:
47  fd_set fileDescriptor_;
48  struct timeval timeout_;
49  struct sockaddr_in fromAddress_;
50  socklen_t addressLength_;
51  int numberOfBytes_;
52 
53  unsigned long dummyIPAddress_;
54  unsigned short dummyPort_;
55  unsigned int readCounter_;
56 
57  std::mutex
58  receiveMutex_; // to make receiver socket thread safe
59  // i.e. multiple threads can share a socket and call receive()
60 };
61 
62 } // namespace ots
63 
64 #endif