Exemplo n.º 1
0
 public static function run()
 {
     declare (ticks=1);
     pcntl_signal(SIGCHLD, array('Octave_daemon', 'deadChild'));
     pcntl_signal(SIGTERM, array('Octave_daemon', 'kill'));
     while (true) {
         foreach (self::$servers as $server) {
             while ($sock = $server->accept_connection()) {
                 Octave_pool::newConnection($sock);
             }
             Octave_pool::manageConnections();
         }
         usleep(1000);
     }
 }
Exemplo n.º 2
0
 public static function manageConnections()
 {
     $still_waiting = array();
     foreach (self::$pending_connections as $cSocket) {
         if ($kid =& self::getChild($cSocket)) {
             $pid = pcntl_fork();
             if ($pid == -1) {
                 Octave_logger::log("Failed forking!", LOG_ERR);
                 exit;
             } elseif ($pid) {
                 // Parent
                 Octave_daemon::$child_pids[$pid] = true;
                 $kid->pid = $pid;
                 $kid->close();
             } else {
                 // Child
                 Octave_daemon::childMode();
                 chdir(self::$home_directory);
                 $kid->entertain();
                 $kid->killSocket();
                 exit;
             }
         } else {
             $still_waiting[] = $cSocket;
         }
     }
     self::$pending_connections = $still_waiting;
 }