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