Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. // udp_test.cpp : Test a UDP socket send for performance
  2. //
  3.  
  4. //#include "stdafx.h"
  5. #include <winsock2.h>
  6. #include <iostream>
  7. #pragma comment(lib,"ws2_32.lib")
  8. #include <Windows.h>
  9. #include <Ws2tcpip.h> //inet_pton
  10.  
  11. int main(int argc, char* argv[])
  12. {
  13.     WSADATA wsaData;
  14.     WSAStartup(0x0202,&wsaData); /*windows socket startup */
  15.  
  16.     if (argc == 1){
  17.         std::cout << argv[0] << " [ip-addr] [num-secs] [buff-size]" << std::endl;
  18.         return -1;
  19.     }
  20.  
  21.     struct sockaddr_in servaddr;
  22.     memset(&servaddr, 0, sizeof(servaddr));
  23.     servaddr.sin_family = AF_INET;
  24.     servaddr.sin_port = htons(49156);
  25.     inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
  26.  
  27.     int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
  28.     if (sockfd < 0) std::cout << "error making socket" << std::endl;
  29.  
  30.     connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
  31.  
  32.     //setup the run length for this test
  33.     size_t num_secs = 20;
  34.     if (argc > 2) num_secs = atoi(argv[2]);
  35.     std::cout << "Num secs to run " << num_secs << std::endl;
  36.  
  37.     //setup the buffer size for each send call
  38.     size_t buff_size = 1400; //default UDP MTU is 1472
  39.     if (argc > 3) buff_size = atoi(argv[3]);
  40.     std::cout << "Bytes per send " << buff_size << std::endl;
  41.     char *buf = new char[buff_size];
  42.  
  43.     //setup performance counters
  44.     LARGE_INTEGER counts, freq;
  45.     QueryPerformanceCounter(&counts);
  46.     QueryPerformanceFrequency(&freq);
  47.  
  48.     //call in a loop until time is up
  49.     size_t packets_sent = 0;
  50.     while(1){
  51.  
  52.         send(sockfd, buf, buff_size, 0);
  53.         packets_sent++;
  54.         LARGE_INTEGER counts_now;
  55.         QueryPerformanceCounter(&counts_now);
  56.  
  57.         if (((counts_now.QuadPart - counts.QuadPart) / freq.QuadPart) > num_secs) break;
  58.  
  59.     }
  60.  
  61.     std::cout << "Sent " << packets_sent << " pkts in " << num_secs << "." << std::endl;
  62.     std::cout << "  Data rate approx " << ((double(packets_sent)*buff_size*8/num_secs)/1e6) << " Mbps" << std::endl;
  63.     std::cout << "  Samp rate approx " << ((double(packets_sent)*buff_size/4/num_secs)/1e6) << " Msps" << std::endl;
  64.  
  65.     //cleanup!
  66.     closesocket(sockfd);
  67.     WSACleanup();
  68.  
  69.    return 1;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement