11 #include <arpa/inet.h>
13 #include <sys/socket.h>
14 #include <sys/types.h>
25 static const uint16_t maxGbit = 10;
26 static const double maxbytes = maxGbit * 1e9 * 0.125;
28 static const uint16_t packetSize = 8198;
29 static const uint16_t BUFLEN = packetSize / 2;
32 static const uint packetNum = int(2e9) / packetSize;
35 static const uint chNum = 2;
38 static const char* IP[chNum] = {
"192.168.34.12",
"192.168.34.14"};
39 static const int PORT[chNum] = {51872, 51874};
41 int client[chNum] = {};
43 uint packetCount[chNum] = {};
47 uint size = 2 * BUFLEN;
48 int16_t
data[BUFLEN] = {};
54 struct sockaddr_in servaddr[chNum], cliaddr[chNum];
56 int slen =
sizeof(cliaddr);
64 int createClient(uint chan)
69 if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
71 perror(
"socket creation failed");
76 memset(&servaddr[chan], 0,
sizeof(servaddr[chan]));
79 servaddr[chan].sin_family = AF_INET;
80 servaddr[chan].sin_port = htons(PORT[chan]);
81 servaddr[chan].sin_addr.s_addr = inet_addr(IP[chan]);
83 cout <<
"Channel = " << chan <<
": IP = " << IP[chan] <<
", PORT = " << PORT[chan]
84 <<
", socket = " << sock << endl;
86 static const uint32_t sndbufsize = pow(2, 21);
87 setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (
char*)&sndbufsize,
sizeof(sndbufsize));
93 int sendPacket(uint chan,
int socket,
packet* p)
96 for(uint i = 0; i < packetNum; i++)
106 (
const struct sockaddr*)&servaddr[chan],
107 sizeof(servaddr[chan]));
118 cout <<
"Creating distinct packets..." << endl;
121 dataPacket[0] =
new packet[packetNum];
122 dataPacket[1] =
new packet[packetNum];
123 for(uint j = 0; j < packetNum; j++)
125 for(uint k = 0; k < BUFLEN; k++)
127 dataPacket[0][j].data[k] = j + k;
128 dataPacket[1][j].data[k] = 1 + j + k;
132 for(
int i = 0; i < 5; i++)
134 cout <<
"Sending packets in " << 5 - i <<
"..." << endl;
140 for(uint i = 0; i < chNum; i++)
142 client[i] = createClient(i);
146 std::thread* client_thread[chNum];
149 for(uint i = 0; i < chNum; i++)
151 client_thread[i] =
new std::thread(sendPacket, i, client[i], dataPacket[i]);
155 for(uint i = 0; i < chNum; i++)
157 client_thread[i]->join();
158 cout <<
"Channel " << i <<
" sent " << packetCount[i] <<
" packets" << endl;