Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // udp_test.cpp : Test a UDP socket send for performance
- //
- //#include "stdafx.h"
- #include <winsock2.h>
- #include <iostream>
- #pragma comment(lib,"ws2_32.lib")
- #include <Windows.h>
- #include <Ws2tcpip.h> //inet_pton
- int main(int argc, char* argv[])
- {
- WSADATA wsaData;
- WSAStartup(0x0202,&wsaData); /*windows socket startup */
- if (argc == 1){
- std::cout << argv[0] << " [ip-addr] [num-secs] [buff-size]" << std::endl;
- return -1;
- }
- struct sockaddr_in servaddr;
- memset(&servaddr, 0, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_port = htons(49156);
- inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
- int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if (sockfd < 0) std::cout << "error making socket" << std::endl;
- connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
- //setup the run length for this test
- size_t num_secs = 20;
- if (argc > 2) num_secs = atoi(argv[2]);
- std::cout << "Num secs to run " << num_secs << std::endl;
- //setup the buffer size for each send call
- size_t buff_size = 1400; //default UDP MTU is 1472
- if (argc > 3) buff_size = atoi(argv[3]);
- std::cout << "Bytes per send " << buff_size << std::endl;
- char *buf = new char[buff_size];
- //setup performance counters
- LARGE_INTEGER counts, freq;
- QueryPerformanceCounter(&counts);
- QueryPerformanceFrequency(&freq);
- //call in a loop until time is up
- size_t packets_sent = 0;
- while(1){
- send(sockfd, buf, buff_size, 0);
- packets_sent++;
- LARGE_INTEGER counts_now;
- QueryPerformanceCounter(&counts_now);
- if (((counts_now.QuadPart - counts.QuadPart) / freq.QuadPart) > num_secs) break;
- }
- std::cout << "Sent " << packets_sent << " pkts in " << num_secs << "." << std::endl;
- std::cout << " Data rate approx " << ((double(packets_sent)*buff_size*8/num_secs)/1e6) << " Mbps" << std::endl;
- std::cout << " Samp rate approx " << ((double(packets_sent)*buff_size/4/num_secs)/1e6) << " Msps" << std::endl;
- //cleanup!
- closesocket(sockfd);
- WSACleanup();
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement