X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=ctdlphp%2Fctdlsession.php;h=a120094023eac2a073c69cf551af9421d0006bfa;hb=dab7e575e02461bf6541c02b516a422f5a6af2b9;hp=f2ac6f5237f052c468bd58766c7beb82ad993857;hpb=94912e04015f434aa68951d24a34a078771a8384;p=citadel.git diff --git a/ctdlphp/ctdlsession.php b/ctdlphp/ctdlsession.php index f2ac6f523..a12009402 100644 --- a/ctdlphp/ctdlsession.php +++ b/ctdlphp/ctdlsession.php @@ -47,40 +47,42 @@ function establish_citadel_session() { " /dev/null 2>&1 " . " 3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 & " ; exec($cmd); - sleep(2); - // Ok, now try again. - $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5); + // Keep attempting connections 10 times per second up to 100 times + $attempts = 0; + while (!$clientsocket) { + usleep(100); + $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5); + $attempts += 1; + if ($attempts > 100) { + echo "ERROR: unable to start connection proxy. "; + echo "Please contact your system administrator.
\n"; + flush(); + exit(1); + } + } - // Try to log the user back in and go back to the correct room. - if ($clientsocket) { + // At this point we have a good connection to Citadel. - ctdl_iden(); // Identify client + ctdl_iden(); // Identify client - if ($_SESSION["username"]) { - login_existing_user( - $_SESSION["username"], - $_SESSION["password"] - ); - } - - if ($_SESSION["room"]) { - ctdl_goto($_SESSION["room"]); - } - else { - ctdl_goto("_BASEROOM_"); - } + if ($_SESSION["username"]) { + login_existing_user( + $_SESSION["username"], + $_SESSION["password"] + ); } - } - if ($clientsocket) { - if (!$_SESSION["serv_humannode"]) { - ctdl_get_serv_info(); + if ($_SESSION["room"]) { + ctdl_goto($_SESSION["room"]); + } + else { + ctdl_goto("_BASEROOM_"); } } - else { - echo "ERROR: no Citadel socket!
\n"; - flush(); + + if (!$_SESSION["serv_humannode"]) { + ctdl_get_serv_info(); } // If the user is trying to call up any page other than