// @(#)root/net:$Name: $:$Id: TPSocket.h,v 1.8 2004/12/15 17:48:03 rdm Exp $
// Author: Fons Rademakers 20/1/2001
/*************************************************************************
* Copyright (C) 1995-2001, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TPSocket
#define ROOT_TPSocket
//////////////////////////////////////////////////////////////////////////
// //
// TPSocket //
// //
// This class implements parallel client sockets. A parallel socket is //
// an endpoint for communication between two machines. It is parallel //
// because several TSockets are open at the same time to the same //
// destination. This especially speeds up communication over Big Fat //
// Pipes (i.e. high bandwidth, high latency WAN connections). //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TSocket
#include "TSocket.h"
#endif
class TMonitor;
class TPSocket : public TSocket {
friend class TPServerSocket;
private:
TSocket **fSockets; // array of parallel sockets
TMonitor *fWriteMonitor; // monitor write on parallel sockets
TMonitor *fReadMonitor; // monitor read from parallel sockets
Int_t fSize; // number of parallel sockets
Int_t *fWriteBytesLeft; // bytes left to write for specified socket
Int_t *fReadBytesLeft; // bytes left to read for specified socket
char **fWritePtr; // pointer to write buffer for specified socket
char **fReadPtr; // pointer to read buffer for specified socket
TPSocket(TSocket *pSockets[], Int_t size);
TPSocket(const TPSocket &); // not implemented
void operator=(const TPSocket &); // idem
void Init(Int_t tcpwindowsize, TSocket *sock = 0);
Option_t *GetOption() const { return TObject::GetOption(); }
public:
TPSocket(TInetAddress address, const char *service, Int_t size,
Int_t tcpwindowsize = -1);
TPSocket(TInetAddress address, Int_t port, Int_t size,
Int_t tcpwindowsize = -1);
TPSocket(const char *host, const char *service, Int_t size,
Int_t tcpwindowsize = -1);
TPSocket(const char *host, Int_t port, Int_t size, Int_t tcpwindowsize = -1);
TPSocket(const char *host, Int_t port, Int_t size, TSocket *sock);
virtual ~TPSocket();
void Close(Option_t *opt="");
Int_t GetDescriptor() const;
TInetAddress GetLocalInetAddress();
Int_t Send(const TMessage &mess);
Int_t Send(Int_t kind) { return TSocket::Send(kind); }
Int_t Send(Int_t status, Int_t kind) { return TSocket::Send(status, kind); }
Int_t Send(const char *mess, Int_t kind = kMESS_STRING) { return TSocket::Send(mess, kind); }
Int_t SendRaw(const void *buffer, Int_t length, ESendRecvOptions opt);
Int_t Recv(TMessage *&mess);
Int_t Recv(Int_t &status, Int_t &kind) { return TSocket::Recv(status, kind); }
Int_t Recv(char *mess, Int_t max) { return TSocket::Recv(mess, max); }
Int_t Recv(char *mess, Int_t max, Int_t &kind) { return TSocket::Recv(mess, max, kind); }
Int_t RecvRaw(void *buffer, Int_t length, ESendRecvOptions opt);
Bool_t IsValid() const { return fSockets ? kTRUE : kFALSE; }
Int_t GetErrorCode() const;
Int_t SetOption(ESockOptions opt, Int_t val);
Int_t GetOption(ESockOptions opt, Int_t &val);
Int_t GetSize() const { return fSize; }
ClassDef(TPSocket,0) // Parallel client socket
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1