void pserv() { // Server program to test parallel sockets. // // To run this demo do the following: // - Open two windows // - Start ROOT in all two windows // - Execute in the first window: .x pserv.C // - Execute in the second window: .x pclient.C //Author: Fons Rademakers // Open a parallel server socket looking for connections on a named // service or on a specified port. //TPServerSocket *ss = new TServerSocket("rootserv", kTRUE); TPServerSocket *ss = new TPServerSocket(9090, kTRUE); // Accept a connection and return a full-duplex communication socket. TPSocket *sock = (TPSocket *) ss->Accept(); delete ss; int niter, bsize; sock->Recv(niter, bsize); printf("Receive %d buffers of %d bytes over %d parallel sockets...\n", niter, bsize, sock->GetSize()); char *buf = new char[bsize]; Int_t nsleep = 10; printf("Tired: sleeping a bit (%d s) before ...\n", nsleep); gSystem->Sleep(nsleep*1000); printf("Waking up! \n"); // start timer TStopwatch timer; timer.Start(); // accept data from client long long nrecv = 0; for (int i = 0; i < niter; i++) { memset(buf, 0, bsize); int ret = sock->RecvRaw(buf, bsize, ESendRecvOptions::kDefault); if (ret < 0) { printf("error receiving\n"); break; } else { nrecv += ret; } if (buf[0] != 65) { printf("received data corrupted\n"); break; } } delete sock; delete [] buf; // stop timer and print results timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); printf("%lld bytes (%lld, %d, %d) received in %f seconds\n", nrecv, (long long) niter*bsize, niter, bsize, rtime); if (rtime > 0) printf("%5.2f MB/s\n", Double_t(nrecv/1024./1024.)/rtime); }