12 #ifndef ROOT_TUDPSocket
13 #define ROOT_TUDPSocket
37 class TUDPSocket :
public TNamed {
39 friend class TServerSocket;
42 enum EStatusBits { kIsUnix = BIT(16),
45 enum EInterest { kRead = 1, kWrite = 2 };
46 enum EServiceType { kSOCKD, kROOTD, kPROOFD };
49 TInetAddress fAddress;
53 TInetAddress fLocalAddress;
54 Int_t fRemoteProtocol;
55 TSecContext *fSecContext;
58 EServiceType fServType;
64 TVirtualMutex *fLastUsageMtx;
65 TTimeStamp fLastUsage;
67 static ULong64_t fgBytesRecv;
68 static ULong64_t fgBytesSent;
70 TUDPSocket() : fAddress(), fBytesRecv(0), fBytesSent(0), fCompress(0),
71 fLocalAddress(), fRemoteProtocol(), fSecContext(0), fService(),
72 fServType(kSOCKD), fSocket(-1), fUrl(),
73 fBitsInfo(), fUUIDs(0), fLastUsageMtx(0), fLastUsage() { }
75 void SetDescriptor(Int_t desc) { fSocket = desc; }
76 void SendStreamerInfos(
const TMessage &mess);
77 Bool_t RecvStreamerInfos(TMessage *mess);
78 void SendProcessIDs(
const TMessage &mess);
79 Bool_t RecvProcessIDs(TMessage *mess);
82 TUDPSocket& operator=(
const TUDPSocket &);
83 Option_t *GetOption()
const {
return TObject::GetOption(); }
86 TUDPSocket(TInetAddress address,
const char *service);
87 TUDPSocket(TInetAddress address, Int_t port);
88 TUDPSocket(
const char *host,
const char *service);
89 TUDPSocket(
const char *host, Int_t port);
90 TUDPSocket(
const char *sockpath);
92 TUDPSocket(Int_t descriptor);
93 TUDPSocket(Int_t descriptor,
const char *sockpath);
94 TUDPSocket(
const TUDPSocket &s);
96 virtual ~TUDPSocket() { Close(); }
98 virtual void Close(Option_t *opt=
"");
99 virtual Int_t GetDescriptor()
const {
return fSocket; }
100 TInetAddress GetInetAddress()
const {
return fAddress; }
101 virtual TInetAddress GetLocalInetAddress();
102 Int_t GetPort()
const {
return fAddress.GetPort(); }
103 const char *GetService()
const {
return fService; }
104 Int_t GetServType()
const {
return (Int_t)fServType; }
105 virtual Int_t GetLocalPort();
106 UInt_t GetBytesSent()
const {
return fBytesSent; }
107 UInt_t GetBytesRecv()
const {
return fBytesRecv; }
108 Int_t GetCompressionAlgorithm()
const;
109 Int_t GetCompressionLevel()
const;
110 Int_t GetCompressionSettings()
const;
111 Int_t GetErrorCode()
const;
112 virtual Int_t GetOption(ESockOptions opt, Int_t &val);
113 Int_t GetRemoteProtocol()
const {
return fRemoteProtocol; }
114 TSecContext *GetSecContext()
const {
return fSecContext; }
116 TTimeStamp GetLastUsage() { R__LOCKGUARD2(fLastUsageMtx);
return fLastUsage; }
117 const char *GetUrl()
const {
return fUrl; }
119 virtual Bool_t IsValid()
const {
return fSocket < 0 ? kFALSE : kTRUE; }
120 virtual Int_t Recv(TMessage *&mess);
121 virtual Int_t Recv(Int_t &status, Int_t &kind);
122 virtual Int_t Recv(
char *mess, Int_t max);
123 virtual Int_t Recv(
char *mess, Int_t max, Int_t &kind);
124 virtual Int_t RecvRaw(
void *buffer, Int_t length, ESendRecvOptions opt = kDefault);
125 virtual Int_t Reconnect() {
return -1; }
126 virtual Int_t Select(Int_t interest = kRead, Long_t timeout = -1);
127 virtual Int_t Send(
const TMessage &mess);
128 virtual Int_t Send(Int_t kind);
129 virtual Int_t Send(Int_t status, Int_t kind);
130 virtual Int_t Send(
const char *mess, Int_t kind = kMESS_STRING);
131 virtual Int_t SendObject(
const TObject *obj, Int_t kind = kMESS_OBJECT);
132 virtual Int_t SendRaw(
const void *buffer, Int_t length,
133 ESendRecvOptions opt = kDefault);
134 void SetCompressionAlgorithm(Int_t algorithm = ROOT::RCompressionSetting::EAlgorithm::kUseGlobal);
135 void SetCompressionLevel(Int_t level = ROOT::RCompressionSetting::ELevel::kUseMin);
136 void SetCompressionSettings(Int_t settings = ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault);
137 virtual Int_t SetOption(ESockOptions opt, Int_t val);
138 void SetRemoteProtocol(Int_t rproto) { fRemoteProtocol = rproto; }
139 void SetSecContext(TSecContext *ctx) { fSecContext = ctx; }
140 void SetService(
const char *service) { fService = service; }
141 void SetServType(Int_t st) { fServType = (EServiceType)st; }
142 void SetUrl(
const char *url) { fUrl = url; }
144 void Touch() { R__LOCKGUARD2(fLastUsageMtx); fLastUsage.Set(); }
146 static ULong64_t GetSocketBytesSent();
147 static ULong64_t GetSocketBytesRecv();
149 static void NetError(
const char *where, Int_t error);
151 ClassDef(TUDPSocket,0)
155 inline Int_t TUDPSocket::GetCompressionAlgorithm()
const
157 return (fCompress < 0) ? -1 : fCompress / 100;
161 inline Int_t TUDPSocket::GetCompressionLevel()
const
163 return (fCompress < 0) ? -1 : fCompress % 100;
167 inline Int_t TUDPSocket::GetCompressionSettings()
const
169 return (fCompress < 0) ? -1 : fCompress;