/usr/include/root/TUDPSocket.h is in libroot-net-dev 5.34.30-0ubuntu8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | // @(#)root/net:$Id$
// Author: Marcelo Sousa 26/10/2011
/*************************************************************************
* Copyright (C) 1995-2011, 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_TUDPSocket
#define ROOT_TUDPSocket
//////////////////////////////////////////////////////////////////////////
// //
// TUDPSocket //
// //
// This class implements udp client sockets. A socket is an endpoint //
// for communication between two machines. //
// The actual work is done via the TSystem class (either TUnixSystem, //
// or TWinNTSystem). //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
#ifndef ROOT_TBits
#include "TBits.h"
#endif
#ifndef ROOT_TInetAddress
#include "TInetAddress.h"
#endif
#ifndef ROOT_MessageTypes
#include "MessageTypes.h"
#endif
#ifndef ROOT_TVirtualAuth
#include "TVirtualAuth.h"
#endif
#ifndef ROOT_TSecContext
#include "TSecContext.h"
#endif
#ifndef ROOT_TTimeStamp
#include "TTimeStamp.h"
#endif
#ifndef ROOT_TVirtualMutex
#include "TVirtualMutex.h"
#endif
#ifndef ROOT_TSocket
#include "TSocket.h"
#endif
class TUDPSocket : public TNamed {
friend class TServerSocket;
public:
enum EStatusBits { kIsUnix = BIT(16), // set if unix socket
kBrokenConn = BIT(17) // set if conn reset by peer or broken
};
enum EInterest { kRead = 1, kWrite = 2 };
enum EServiceType { kSOCKD, kROOTD, kPROOFD };
protected:
TInetAddress fAddress; // remote internet address and port #
UInt_t fBytesRecv; // total bytes received over this socket
UInt_t fBytesSent; // total bytes sent using this socket
Int_t fCompress; // Compression level and algorithm
TInetAddress fLocalAddress; // local internet address and port #
Int_t fRemoteProtocol; // protocol of remote daemon
TSecContext *fSecContext; // after a successful Authenticate call
// points to related security context
TString fService; // name of service (matches remote port #)
EServiceType fServType; // remote service type
Int_t fSocket; // socket descriptor
TString fUrl; // needs this for special authentication options
TBits fBitsInfo; // bits array to mark TStreamerInfo classes already sent
TList *fUUIDs; // list of TProcessIDs already sent through the socket
TVirtualMutex *fLastUsageMtx; // Protect last usage setting / reading
TTimeStamp fLastUsage; // Time stamp of last usage
static ULong64_t fgBytesRecv; // total bytes received by all socket objects
static ULong64_t fgBytesSent; // total bytes sent by all socket objects
TUDPSocket() : fAddress(), fBytesRecv(0), fBytesSent(0), fCompress(0),
fLocalAddress(), fRemoteProtocol(), fSecContext(0), fService(),
fServType(kSOCKD), fSocket(-1), fUrl(),
fBitsInfo(), fUUIDs(0), fLastUsageMtx(0), fLastUsage() { }
void SetDescriptor(Int_t desc) { fSocket = desc; }
void SendStreamerInfos(const TMessage &mess);
Bool_t RecvStreamerInfos(TMessage *mess);
void SendProcessIDs(const TMessage &mess);
Bool_t RecvProcessIDs(TMessage *mess);
private:
TUDPSocket& operator=(const TUDPSocket &); // not implemented
Option_t *GetOption() const { return TObject::GetOption(); }
public:
TUDPSocket(TInetAddress address, const char *service);
TUDPSocket(TInetAddress address, Int_t port);
TUDPSocket(const char *host, const char *service);
TUDPSocket(const char *host, Int_t port);
TUDPSocket(const char *sockpath);
TUDPSocket(Int_t descriptor);
TUDPSocket(Int_t descriptor, const char *sockpath);
TUDPSocket(const TUDPSocket &s);
virtual ~TUDPSocket() { Close(); }
virtual void Close(Option_t *opt="");
virtual Int_t GetDescriptor() const { return fSocket; }
TInetAddress GetInetAddress() const { return fAddress; }
virtual TInetAddress GetLocalInetAddress();
Int_t GetPort() const { return fAddress.GetPort(); }
const char *GetService() const { return fService; }
Int_t GetServType() const { return (Int_t)fServType; }
virtual Int_t GetLocalPort();
UInt_t GetBytesSent() const { return fBytesSent; }
UInt_t GetBytesRecv() const { return fBytesRecv; }
Int_t GetCompressionAlgorithm() const;
Int_t GetCompressionLevel() const;
Int_t GetCompressionSettings() const;
Int_t GetErrorCode() const;
virtual Int_t GetOption(ESockOptions opt, Int_t &val);
Int_t GetRemoteProtocol() const { return fRemoteProtocol; }
TSecContext *GetSecContext() const { return fSecContext; }
TTimeStamp GetLastUsage() { R__LOCKGUARD2(fLastUsageMtx); return fLastUsage; }
const char *GetUrl() const { return fUrl; }
virtual Bool_t IsValid() const { return fSocket < 0 ? kFALSE : kTRUE; }
virtual Int_t Recv(TMessage *&mess);
virtual Int_t Recv(Int_t &status, Int_t &kind);
virtual Int_t Recv(char *mess, Int_t max);
virtual Int_t Recv(char *mess, Int_t max, Int_t &kind);
virtual Int_t RecvRaw(void *buffer, Int_t length, ESendRecvOptions opt = kDefault);
virtual Int_t Reconnect() { return -1; }
virtual Int_t Select(Int_t interest = kRead, Long_t timeout = -1);
virtual Int_t Send(const TMessage &mess);
virtual Int_t Send(Int_t kind);
virtual Int_t Send(Int_t status, Int_t kind);
virtual Int_t Send(const char *mess, Int_t kind = kMESS_STRING);
virtual Int_t SendObject(const TObject *obj, Int_t kind = kMESS_OBJECT);
virtual Int_t SendRaw(const void *buffer, Int_t length,
ESendRecvOptions opt = kDefault);
void SetCompressionAlgorithm(Int_t algorithm=0);
void SetCompressionLevel(Int_t level=1);
void SetCompressionSettings(Int_t settings=1);
virtual Int_t SetOption(ESockOptions opt, Int_t val);
void SetRemoteProtocol(Int_t rproto) { fRemoteProtocol = rproto; }
void SetSecContext(TSecContext *ctx) { fSecContext = ctx; }
void SetService(const char *service) { fService = service; }
void SetServType(Int_t st) { fServType = (EServiceType)st; }
void SetUrl(const char *url) { fUrl = url; }
void Touch() { R__LOCKGUARD2(fLastUsageMtx); fLastUsage.Set(); }
static ULong64_t GetSocketBytesSent();
static ULong64_t GetSocketBytesRecv();
static void NetError(const char *where, Int_t error);
ClassDef(TUDPSocket,0) //This class implements UDP client sockets
};
//______________________________________________________________________________
inline Int_t TUDPSocket::GetCompressionAlgorithm() const
{
return (fCompress < 0) ? -1 : fCompress / 100;
}
//______________________________________________________________________________
inline Int_t TUDPSocket::GetCompressionLevel() const
{
return (fCompress < 0) ? -1 : fCompress % 100;
}
//______________________________________________________________________________
inline Int_t TUDPSocket::GetCompressionSettings() const
{
return (fCompress < 0) ? -1 : fCompress;
}
#endif
|