Re: [ROOT] Time consumption in MSocket constructor

From: Andreas Zoglauer (zog@mpe.mpg.de)
Date: Thu Apr 26 2001 - 09:34:18 MEST


Hi Fons,

On Wed, 25 Apr 2001, Fons Rademakers wrote:
> could you change TUnixSystem::OpenConnection and use something like
> Sleep(250). Or without sleep at all. If that is acceptable let me know
> then I change it in CVS.


I tested it between two Systems on our internal network with the tutorial 
macros hclient.C and hserv.C with the following code:


//______________________________________________________________________________
int TUnixSystem::OpenConnection(const char *server, int port, int 
tcpwindowsize)
{
   // Open a connection to a service on a server. Try 3 times with an
   // interval of 1 second.
   // Use tcpwindowsize to specify the size of the receive buffer, it has
   // to be specified here to make sure the window scale option is set (for
   // tcpwindowsize > 65KB and for platforms supporting window scaling).
   // Is called via the TSocket constructor.

   int attempts = 3;
   for (int i = 0; i < attempts; i++) {
      Warning("", "Attempt: %d", i);
      int fd = ConnectService(server, port, tcpwindowsize);
      if (fd >= 0)
         return fd;
      if (i < attempts-1) {
         Sleep(250);
      }
   }
   return -1;
}

As long as the server was running, there was always a connection after 
the first attempt - so the Sleep-command was only reached when a 
connection was impossible, because the server was not running - this is 
the case I have to cope with in my program.



If there are some good reasons not to change the default behaviour, we 
should try something like:

In TSystem and TUnixSystem:
OpenConnection(const char *server, int port, int
tcpwindowsize = -1, int attempts = 3)

int TUnixSystem::OpenConnection(const char *server, int port, int 
tcpwindowsize, int attempts) {
   // Open a connection to a service on a server. Try 3 times with an
   // interval of 1 second.
   // Use tcpwindowsize to specify the size of the receive buffer, it has
   // to be specified here to make sure the window scale option is set (for
   // tcpwindowsize > 65KB and for platforms supporting window scaling).
   // Is called via the TSocket constructor.

   for (int i = 0; i < attempts; i++) {
      int fd = ConnectService(server, port, tcpwindowsize);
      if (fd >= 0)
         return fd;
      if (i < attemps-1) {
         Sleep(1000);
      }
   }
   return -1;
}

With this changes I can derive my own Socket class and can avoid any 
unnecessary wait cycles when the server is not running.


Andreas


----------------------------------------------------------------------
Andreas Zoglauer

MPI fuer extraterrestrische Physik         Phone:    +49/89-30000-3848
Postfach 1312                              Fax:      +49/89-30000-3569
85741 Garching, Germany                    Email:    zog@mpe.mpg.de
----------------------------------------------------------------------



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:43 MET