/usr/include/root/TSocket.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 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | // @(#)root/net:$Id$
// Author: Fons Rademakers 18/12/96
/*************************************************************************
* Copyright (C) 1995-2000, 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_TSocket
#define ROOT_TSocket
//////////////////////////////////////////////////////////////////////////
// //
// TSocket //
// //
// This class implements 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
enum ESockOptions {
kSendBuffer, // size of send buffer
kRecvBuffer, // size of receive buffer
kOobInline, // OOB message inline
kKeepAlive, // keep socket alive
kReuseAddr, // allow reuse of local portion of address 5-tuple
kNoDelay, // send without delay
kNoBlock, // non-blocking I/O
kProcessGroup, // socket process group (used for SIGURG and SIGIO)
kAtMark, // are we at out-of-band mark (read only)
kBytesToRead // get number of bytes to read, FIONREAD (read only)
};
enum ESendRecvOptions {
kDefault, // default option (= 0)
kOob, // send or receive out-of-band data
kPeek, // peek at incoming message (receive only)
kDontBlock // send/recv as much data as possible without blocking
};
class TMessage;
class THostAuth;
class TSocket : public TNamed {
friend class TServerSocket;
friend class TProofServ; // to be able to call SetDescriptor(), RecvHostAuth()
friend class TSlave; // to be able to call SendHostAuth()
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
Int_t fTcpWindowSize; // TCP window size (default 65535);
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
static Int_t fgClientProtocol; // client "protocol" version
TSocket() : fAddress(), fBytesRecv(0), fBytesSent(0), fCompress(0),
fLocalAddress(), fRemoteProtocol(), fSecContext(0), fService(),
fServType(kSOCKD), fSocket(-1), fTcpWindowSize(0), fUrl(),
fBitsInfo(), fUUIDs(0), fLastUsageMtx(0), fLastUsage() { }
Bool_t Authenticate(const char *user);
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:
TSocket& operator=(const TSocket &); // not implemented
Option_t *GetOption() const { return TObject::GetOption(); }
public:
TSocket(TInetAddress address, const char *service, Int_t tcpwindowsize = -1);
TSocket(TInetAddress address, Int_t port, Int_t tcpwindowsize = -1);
TSocket(const char *host, const char *service, Int_t tcpwindowsize = -1);
TSocket(const char *host, Int_t port, Int_t tcpwindowsize = -1);
TSocket(const char *sockpath);
TSocket(Int_t descriptor);
TSocket(Int_t descriptor, const char *sockpath);
TSocket(const TSocket &s);
virtual ~TSocket() { 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; }
Int_t GetTcpWindowSize() const { return fTcpWindowSize; }
TTimeStamp GetLastUsage() { R__LOCKGUARD2(fLastUsageMtx); return fLastUsage; }
const char *GetUrl() const { return fUrl; }
virtual Bool_t IsAuthenticated() const { return fSecContext ? kTRUE : kFALSE; }
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 Int_t GetClientProtocol();
static ULong64_t GetSocketBytesSent();
static ULong64_t GetSocketBytesRecv();
static TSocket *CreateAuthSocket(const char *user, const char *host,
Int_t port, Int_t size = 0,
Int_t tcpwindowsize = -1, TSocket *s = 0, Int_t *err = 0);
static TSocket *CreateAuthSocket(const char *url, Int_t size = 0,
Int_t tcpwindowsize = -1, TSocket *s = 0, Int_t *err = 0);
static void NetError(const char *where, Int_t error);
ClassDef(TSocket,0) //This class implements client sockets
};
//______________________________________________________________________________
inline Int_t TSocket::GetCompressionAlgorithm() const
{
return (fCompress < 0) ? -1 : fCompress / 100;
}
//______________________________________________________________________________
inline Int_t TSocket::GetCompressionLevel() const
{
return (fCompress < 0) ? -1 : fCompress % 100;
}
//______________________________________________________________________________
inline Int_t TSocket::GetCompressionSettings() const
{
return (fCompress < 0) ? -1 : fCompress;
}
#endif
|