9 #include "STMDAQ-TestBeam/utils/dataVars.hh"
12 #include "STMDAQ-TestBeam/utils/Logger.hh"
20 #include <sys/types.h>
21 #include<sys/socket.h>
37 static const uint16_t MAX_UDP_SIZE = 65504;
42 static const uint64_t RCVBUF_SZ = 268435456;
44 static const uint64_t SNDBUF_SZ = 268435456/2;
49 static const uint TIMEOUT_SECS = 0;
50 static const uint TIMEOUT_USECS = 500;
52 static const uint TIMEOUT_MAX = 5e4;
55 uint32_t last_packet[CHNUM] = {};
63 uint64_t sock_mem = 0;
64 static const uint64_t SO_SNDBUF_SIZE = 0;
67 static const int RECVMMSG_NUM = 65536;
71 static const int SENDMMSG_NUM = RECVMMSG_NUM/1e2;
74 static const uint16_t MAX_UDP_LEN = MAX_UDP_SIZE/2;
77 int16_t
packet[MAX_PACKET_LEN] = {};
80 struct sockaddr_in servaddr, cliaddr;
83 int slen =
sizeof(cliaddr);
88 struct timeval read_timeout;
90 uint timeout_counter = 0;
95 bool rcv_multiple =
true;
98 bool firstPacket =
true;
101 bool receiving_data[CHNUM] = {};
104 void check_channel(
int CHAN){
105 if (CHAN != HPGE && CHAN != LABR){
107 Logger::Instance()->write(0,
"Error! In UDPsocket::getIPaddress. ");
112 void check_fw_or_sw(
int FW_or_SW){
113 if (FW_or_SW != FW && FW_or_SW != SW){
115 Logger::Instance()->write(0,
"Error! In UDPsocket::check_recv_send. ");
120 string get_channel_name(
int CHAN){
134 uint16_t get_max_udp_size(){
139 void setLastPacketNum(
int chan, uint32_t lastPacket){
140 last_packet[chan] = lastPacket;
144 uint32_t getLastPacketNum(
int chan){
145 return last_packet[chan];
150 uint getTimeoutMax(){
161 std::string getIPaddress(
int CHAN,
int FW_or_SW);
164 int getPort(
int CHAN,
int FW_or_SW);
167 int setupServer(
int CHAN,
int FW_or_SW);
170 int createSocket(
int CHAN,
int FW_or_SW);
173 int setupClient(
int CHAN,
int FW_or_SW);
176 int bindSocket(
int sock);
179 int set_SO_RCVBUF(
int sock, uint64_t size);
182 int set_SO_SNDBUF(
int sock, uint64_t size);
185 int setTimeout(
int secs,
double usecs);
188 int setBufferLength();
191 int sendOne(int16_t*
data, uint16_t size,
int sock);
194 int send(int16_t**
data, uint16_t* size,
int MSG_NUM,
int sock);
197 int recvOne(int16_t*
data,
int sock,
int CHAN);
200 int recv(int16_t*
data,
int sock,
int CHAN);
UDPsocket()
This module creates a UDP socket for 10G readout (main).