Exemplo n.º 1
0
 public function fetch($clients, $ms = -1)
 {
     $poller = new Poller();
     $poll_ids = [];
     foreach ($clients as $i => $client) {
         $id = $poller->registerReadable($client);
         $poll_ids[$id] = $i;
     }
     $ms_left = $ms;
     $ret = [];
     do {
         $rset = [];
         $wset = [];
         $events = 0;
         if ($ms_left > 0) {
             $tv1_ms = gettimeofday(true) * 1000;
             $events = $poller->poll($rset, $wset, $ms_left);
             $tv2_ms = gettimeofday(true) * 1000;
             $ms_left -= $tv2_ms - $tv1_ms;
             if ($ms_left < 0) {
                 $ms_left = 0;
             }
         } else {
             $events = $poller->poll($rset, $wset, $ms_left);
         }
         // $errors = $poller->getLastErrors();
         // if (count($errors) > 0) {
         // $errno  = -1;
         // $errstr = [];
         // foreach ($errors as $error) {
         // $errstr[] = $error;
         // }
         // $this->setErr_($errno, implode(',', $errstr));
         // $ret = false;
         // }
         if ($events > 0) {
             foreach ($rset as $id) {
                 $i = $poll_ids[$id];
                 $msg = $clients[$i]->recv();
                 if ($msg !== false && !$client->errno()) {
                     $ret[$i] = $msg;
                 }
                 $poller->unregister($client);
             }
         }
     } while ($poller->count() && $ms_left > 0);
     return $ret;
 }