pserv.C

Go to the documentation of this file.
00001 void pserv()
00002 {
00003    // Server program to test parallel sockets.
00004    //
00005    // To run this demo do the following:
00006    //   - Open two windows
00007    //   - Start ROOT in all two windows
00008    //   - Execute in the first window: .x pserv.C
00009    //   - Execute in the second window: .x pclient.C
00010    //Author: Fons Rademakers
00011    
00012    // Open a parallel server socket looking for connections on a named
00013    // service or on a specified port.
00014    //TPServerSocket *ss = new TServerSocket("rootserv", kTRUE);
00015    TPServerSocket *ss = new TPServerSocket(9090, kTRUE);
00016 
00017    // Accept a connection and return a full-duplex communication socket.
00018    TPSocket *sock = ss->Accept();
00019    delete ss;
00020 
00021    int niter, bsize;
00022    sock->Recv(niter, bsize);
00023 
00024    printf("Receive %d buffers of %d bytes over %d parallel sockets...\n",
00025           niter, bsize, sock->GetSize());
00026 
00027    char *buf = new char[bsize];
00028 
00029    // start timer
00030    TStopwatch timer;
00031    timer.Start();
00032 
00033    // accept data from client
00034    for (int i = 0; i < niter; i++) {
00035       memset(buf, 0, bsize);
00036       int ret = sock->RecvRaw(buf, bsize);
00037       if (ret < 0) {
00038          printf("error receiving\n");
00039          break;
00040       }
00041       if (buf[0] != 65) {
00042          printf("received data corrupted\n");
00043          break;
00044       }
00045    }
00046 
00047    delete sock;
00048    delete [] buf;
00049 
00050    // stop timer and print results
00051    timer.Stop();
00052    Double_t rtime = timer.RealTime();
00053    Double_t ctime = timer.CpuTime();
00054 
00055    printf("%d bytes received in %f seconds\n", niter*bsize, rtime);
00056    if (rtime > 0) printf("%5.2f MB/s\n", Double_t(niter*bsize/1024/1024)/rtime);
00057 }

Generated on Tue Jul 5 15:44:52 2011 for ROOT_528-00b_version by  doxygen 1.5.1