14 #include <arpa/inet.h>
16 #include <sys/socket.h>
17 #include <sys/types.h>
24 static const uint16_t maxGbit = 10;
25 static const double maxbytes = maxGbit * 1e9 * 0.125;
27 static const uint16_t packetSize = 8198;
28 static const uint16_t BUFLEN = packetSize / 2;
30 static const uint64_t rcvbufsize = 64000000000;
55 struct sockaddr_in servaddr, cliaddr;
56 struct timeval read_timeout;
58 int slen =
sizeof(cliaddr);
71 sock = socket(AF_INET, SOCK_DGRAM, 0);
72 if((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
80 sock = socket(AF_INET, SOCK_DGRAM, 0);
81 if((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
87 memset((
char*)&servaddr, 0,
sizeof(servaddr));
90 servaddr.sin_family = AF_INET;
91 servaddr.sin_port = htons(51872);
92 servaddr.sin_addr.s_addr = inet_addr(
"192.168.34.12");
98 int bindSocket(
int socket)
100 if(bind(socket, (
struct sockaddr*)&servaddr,
sizeof(servaddr)) == -1)
109 int getPacket(
struct packet& p,
int socket)
112 buffer =
new int16_t[BUFLEN];
117 memset((
char*)&cliaddr, 0,
sizeof(cliaddr));
123 FD_SET(socket, &readfds);
125 int ret = select(socket + 1, &readfds, NULL, NULL, &read_timeout);
129 if(recv_len = recvfrom(socket,
133 (
struct sockaddr*)&cliaddr,
134 (socklen_t*)&slen) < 0)
136 die((
char*)
"recvfrom()");
146 cout <<
"error selecting" << endl;
157 int socket = bindSocket(createSocket());
160 setsockopt(socket, SOL_SOCKET, SO_RCVBUF, (
char*)&rcvbufsize,
sizeof(rcvbufsize));
161 cout <<
"SO_RCVBUF = " << bufferSize << endl;
165 uint packetCount = 0;
167 uint packetNum = int(maxbytes) / packetSize;
169 cout <<
"Waiting for packets..." << endl;
171 read_timeout.tv_sec = 15;
172 read_timeout.tv_usec = 0;
176 if(getPacket(dataPacket, socket) == 0)
178 cout <<
"Socket timed out!" << endl;
184 for(
int i = 0; i < 50; i++)
186 cout << i <<
" " << dataPacket.data[i] << endl;
190 std::cout <<
"Recevied packet " << packetCount << std::endl;
191 >>>>>>> bde1220c1687242e5c4d658ec8637a27ae90fbe5
195 read_timeout.tv_sec = 0;
196 read_timeout.tv_usec = 100;
201 cout <<
"\nReceived " << packetCount <<
"/" << packetNum <<
" expected packets"
202 <<
" = " << double(packetCount) / double(packetNum) * 100 <<
" % \n"