Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TServerSocket.h
Go to the documentation of this file.
1 // @(#)root/net:$Id$
2 // Author: Fons Rademakers 18/12/96
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TServerSocket
13 #define ROOT_TServerSocket
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TServerSocket //
19 // //
20 // This class implements server sockets. A server socket waits for //
21 // requests to come in over the network. It performs some operation //
22 // based on that request and then possibly returns a full duplex socket //
23 // to the requester. The actual work is done via the TSystem class //
24 // (either TUnixSystem or TWinNTSystem). //
25 // //
26 //////////////////////////////////////////////////////////////////////////
27 
28 #include "TSocket.h"
29 #include <string>
30 
31 class TSeqCollection;
32 
33 typedef Int_t (*SrvAuth_t)(TSocket *sock, const char *, const char *,
34  std::string&, Int_t &, Int_t &, std::string &,
35  TSeqCollection *);
36 typedef Int_t (*SrvClup_t)(TSeqCollection *);
37 
38 // These mask are globally available to manipulate the option to Accept
39 const UChar_t kSrvAuth = 0x1; // Require client authentication
40 const UChar_t kSrvNoAuth = (kSrvAuth<<4); // Force no client authentication
41 
42 class TServerSocket : public TSocket {
43 
44 private:
45  TSeqCollection *fSecContexts; // List of TSecContext with cleanup info
46  static SrvAuth_t fgSrvAuthHook;
47  static SrvClup_t fgSrvAuthClupHook;
48  static UChar_t fgAcceptOpt; // Default accept options
49 
50  TServerSocket() : fSecContexts(0) { }
51  TServerSocket(const TServerSocket &);
52  void operator=(const TServerSocket &);
53  Bool_t Authenticate(TSocket *);
54 
55 public:
56  enum { kDefaultBacklog = 10 };
57 
58  TServerSocket(Int_t port, Bool_t reuse = kFALSE, Int_t backlog = kDefaultBacklog,
59  Int_t tcpwindowsize = -1);
60  TServerSocket(const char *service, Bool_t reuse = kFALSE,
61  Int_t backlog = kDefaultBacklog, Int_t tcpwindowsize = -1);
62  virtual ~TServerSocket();
63 
64  virtual TSocket *Accept(UChar_t Opt = 0);
65  virtual TInetAddress GetLocalInetAddress();
66  virtual Int_t GetLocalPort();
67 
68  Int_t Send(const TMessage &)
69  { MayNotUse("Send(const TMessage &)"); return 0; }
70  Int_t Send(Int_t)
71  { MayNotUse("Send(Int_t)"); return 0; }
72  Int_t Send(Int_t, Int_t)
73  { MayNotUse("Send(Int_t, Int_t)"); return 0; }
74  Int_t Send(const char *, Int_t = kMESS_STRING)
75  { MayNotUse("Send(const char *, Int_t)"); return 0; }
76  Int_t SendObject(const TObject *, Int_t = kMESS_OBJECT)
77  { MayNotUse("SendObject(const TObject *, Int_t)"); return 0; }
78  Int_t SendRaw(const void *, Int_t, ESendRecvOptions = kDefault)
79  { MayNotUse("SendRaw(const void *, Int_t, ESendRecvOptions)"); return 0; }
80  Int_t Recv(TMessage *&)
81  { MayNotUse("Recv(TMessage *&)"); return 0; }
82  Int_t Recv(Int_t &, Int_t &)
83  { MayNotUse("Recv(Int_t &, Int_t &)"); return 0; }
84  Int_t Recv(char *, Int_t)
85  { MayNotUse("Recv(char *, Int_t)"); return 0; }
86  Int_t Recv(char *, Int_t, Int_t &)
87  { MayNotUse("Recv(char *, Int_t, Int_t &)"); return 0; }
88  Int_t RecvRaw(void *, Int_t, ESendRecvOptions = kDefault)
89  { MayNotUse("RecvRaw(void *, Int_t, ESendRecvOptions)"); return 0; }
90 
91  static UChar_t GetAcceptOptions();
92  static void SetAcceptOptions(UChar_t Opt);
93  static void ShowAcceptOptions();
94 
95  ClassDef(TServerSocket, 0); //This class implements server sockets
96 };
97 
98 #endif